2013-10-30 49 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扩展实现的。