2013-10-30 80 views
1

我會保持簡單。@HTML擴展

我有以下模式:

public class Person 
{ 
    public int Id { get; set; } 
    public string FullName { get; set; } 
} 

我創建該模型在該部分視圖.. \共享\ DisplayTemplates \ Person.cshtml

@model BillSplitter.Classes.Person 
<b>@Model.FullName</b> 

在視圖中,下面的代碼偉大工程:

@Html.DisplayFor(model => model.PaidBy) //PaidBy is type of Person 

這是我想創建擴展:

public static IHtmlString DisplayPersons(this HtmlHelper helper, IEnumerable<Person> model) 
{ 
    string htmlString = ""; 
    foreach (Person p in model) 
     string += helper.DisplayFor(p); //PROBLEM! 

    return new HtmlString(htmlString); 
} 

問題是幫手不公開DisplayFor函數。

如何從本擴展的部分視圖中獲取HtmlString

+1

'使用System.Web.Mvc.Html',雖然你不必這樣做 - MVC將知道如何處理'IEnumerable '。 ;-) –

回答

1

如果傳遞的Person@Html.DisplayFor的集合,它會自動遍歷它,並使用正確的模板顯示每個Person

@Html.DisplayFor(model => model.PersonList) 

假設PersonListIEnumerable<Person>,每個Person將根據要被顯示您的DisplayTemplate,這是您試圖用您的自定義HtmlHelper擴展實現的。