1

我会保持简单。

我有以下模型:

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

我在 ..\Shared\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从这个扩展中的部分视图中获取?

4

1 回答 1

1

Person如果您传递to的集合@Html.DisplayFor,它将自动迭代它并Person使用正确的模板显示每个:

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

假设这PersonList是一个IEnumerable<Person>,每个Person都将根据您的 显示DisplayTemplate,这是您尝试使用自定义 HtmlHelper 扩展实现的目标。

于 2013-10-30T14:09:32.283 回答