在foreach中的LabelFor()

Pro*_*aos 21 c# asp.net-mvc

我有一个与它相关的强类型模型的视图

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
                  Inherits="System.Web.Mvc.ViewPage<SomeNamespace.SomeViewModel>" %>
Run Code Online (Sandbox Code Playgroud)

SomeViewModel看起来像这样

class SomeViewModel
{
    public IEnumerable<Foo> Foos {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

并说Foo是

class Foo
{
   public string Bar {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

并在视图中

<% foreach (var item in Model.Foos) { %>
    <tr>
        <td>
            <%= Html.LabelFor(f => f.Bar) %>
        </td>
Run Code Online (Sandbox Code Playgroud)

我不确定如何Baritem使用中显示属性Html.LabelFor()

有人可以帮我弄这个吗?

谢谢,

Dis*_*ile 39

改为:

<% foreach (var item in Model.Foos) { %>      
<tr>          
    <td>              
        <%= Html.LabelFor(f => item.Bar) %>          
    </td>
<% } %>
Run Code Online (Sandbox Code Playgroud)

而不是f => f.Bar do f => item.Bar,其中item是foreach循环中变量的名称.

这是更美丽的剃刀语法:)

@foreach( var item in Model.Foos ) {
<tr>
    <td>
        @Html.LabelFor(f => item.Bar)
    </td>
    <td>
        @Html.DisplayFor(f => item.Bar)
    </td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)

  • 应该标记为正确答案,IMO. (4认同)

Bob*_*ale 2

你有没有尝试过

<% for (var i=0; i<Model.Foos.Count();i++) { %> 
    <tr> 
        <td> 
            <%= Html.LabelFor(f => f.Foos[i].Bar) %> 
        </td> 
Run Code Online (Sandbox Code Playgroud)

LabelFor 扩展使用 lamda 表达式从模型对象转到选定的属性,请考虑模型的 fa 替换变量。因此,您需要一种从模型到所选属性的方法。您告诉 LabelFor,创建一个名为 f 的局部变量并为其分配模型的值。然后使用 => 后面的位来确定目标属性。

如果您迫切需要使用 foreach,则必须有一种将 item 翻译回原始模型的属性的方法(例如,对于 Gledrius 所说的数组)x=>x.Foos[Model.Foos.IndexOf(foo)])

如果您只想要文本值,则失败

使用 '<%= item %>' 而不是整个标签,或者如果您有 ASP.NET 4 和 MVC2 或更好地使用<%: item %>HTML 编码优点

  • 您要求提供一个 foreach 示例,我提供了一个可行的示例,但随后您接受了不使用 foreach 的答案。o_O (2认同)