如何在迭代器中使用Html.DisplayFor?

Joh*_*zen 36 c# asp.net-mvc-2

我很喜欢 MVC 2.整个过程非常适合网络.

然而,有一项功能,我无法哄骗这个Html.DisplayFor()功能:

<@ Page Inherits="ViewPage<IEnumerable<Foo>>">

<% foreach(var item in Model) { %>

    <%: Html.DisplayFor(item.BarBaz) %>

<% } %>
Run Code Online (Sandbox Code Playgroud)

我需要能够使用DisplayTemplate来获取此值.有没有办法做到这一点?

Joh*_*zen 68

实际上,我想通了.我真傻.

这有效:

<@ Page Inherits="ViewPage<IEnumerable<Foo>>">

<% foreach(var item in Model) { %>

    <%: Html.DisplayFor(m => item.BarBaz) %>

<% } %>
Run Code Online (Sandbox Code Playgroud)

  • 我想,我更愚蠢,因为我不知道如何解释这一点.lambda形式参数m未在表达式中使用.那只是因为它是_DisplayFor_所需要的吗?另外,我预计`@ Html.Display(item.BarBaz)`也可以正常工作,但这没什么. (2认同)

sgr*_*usa 12

您可以通过远离foreach并使用常规for循环来完成它:

 <% for (int i = 0; i < Model.Count(); i++) { %>

    <%: Html.DisplayFor(p=> p.ElementAt(i).BarBaz) %>

 <%} %>
Run Code Online (Sandbox Code Playgroud)

另一个选择是创建一个PartialView,它接受一个Foo对象,只显示你想要的信息.

<% foreach (var item in Model)
   {
       Html.RenderPartial("FooBarBazLine", item);
   } %>
Run Code Online (Sandbox Code Playgroud)


T-m*_*oty 6

这是一个老问题,但我想有人可以从我的解决方案中获益:

Aspx视图

<%@ Page Inherits="ViewPage<IEnumerable<Foo>>" %>

<% foreach (var item in Model) { %>

    <%: Html.DisplayFor(m => item) %>

<% } %>
Run Code Online (Sandbox Code Playgroud)

剃刀视图

@model IEnumerable<Foo>

@foreach (var item in Model)
{
    Html.DisplayFor(m => item)
}
Run Code Online (Sandbox Code Playgroud)

由于DisplayFor接受隐式类型的lambda,我们可以直接指示要在循环中显示的实例.

最后,我同意Anders E. Andersen对模板使用的回答