C# foreach中的LabelFor()
我有一个与之关联的强类型模型的视图C# foreach中的LabelFor(),c#,asp.net-mvc,C#,Asp.net Mvc,我有一个与之关联的强类型模型的视图 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SomeNamespace.SomeViewModel>" %> 在我看来 <% foreach (var item in Model.Foos) { %> &l
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<SomeNamespace.SomeViewModel>" %>
在我看来
<% foreach (var item in Model.Foos) { %>
<tr>
<td>
<%= Html.LabelFor(f => f.Bar) %>
</td>
f、 条)%>
我不知道如何使用Html.LabelFor()
有人能帮我吗
谢谢,从,看起来您需要在属性上指定:
[DisplayName("My Bar")]
public string Bar { get; set; }
如果要列出Foos,它将如下所示:
Html.LabelFor(x=>x.Foos[Model.Foos.IndexOf(item)])
@foreach (Foo foo in Model)
{
<p>
@(Html.LabelForItem<Foo, string>(foo, f => f.Name))
</p>
}
您正在对Foo进行迭代,但根本不使用item变量 你试过了吗
<% for (var i=0; i<Model.Foos.Count();i++) { %>
<tr>
<td>
<%= Html.LabelFor(f => f.Foos[i].Bar) %>
</td>
扩展标记使用一个LAMDA表达式从模型对象到所选属性,考虑F为模型的替换变量。因此,您需要一种从模型到所选属性的方法。您要告诉LabelFor,创建一个名为f的局部变量,并用模型的值分配它。然后使用=>后面的位确定目标属性
如果您非常想使用foreach,则必须有一种方法将项转换回原始模型的属性(例如,对于Gledrius所说的数组x=>x.Foos[model.Foos.IndexOf(foo)])
如果您只需要文本值,则失败
使用“”而不是整个labelfor,或者如果您有ASP.NET 4和MVC2或更好的版本,请使用
进行HTML编码,请执行以下操作:
<% foreach (var item in Model.Foos) { %>
<tr>
<td>
<%= Html.LabelFor(f => item.Bar) %>
</td>
<% } %>
项目(条形图)%>
而不是f=>f.Bar do f=>item.Bar,其中item是foreach循环中变量的名称
下面是更漂亮的razor语法:)
@foreach(Model.Foos中的变量项){
@LabelFor(f=>item.Bar)
@DisplayFor(f=>item.Bar)
}
您也可以编写一个不直接绑定到页面模型的自定义扩展
public static MvcHtmlString LabelForItem<T, V>(this HtmlHelper html, T obj, Expression<Func<T, V>> expression)
{
Func<T,V> func = expression.Compile();
V val = func(obj);
return html.Label(val.ToString());
}
public static MvcHtmlString LabelForItem(此HtmlHelper html,T obj,表达式)
{
Func Func=expression.Compile();
V val=func(obj);
返回html.Label(val.ToString());
}
你会这样使用它:
Html.LabelFor(x=>x.Foos[Model.Foos.IndexOf(item)])
@foreach (Foo foo in Model)
{
<p>
@(Html.LabelForItem<Foo, string>(foo, f => f.Name))
</p>
}
@foreach(模型中的Foo-Foo)
{
@(Html.LabelForItem(foo,f=>f.Name))
}
该代码有错误吗?@AndyC我不知道如何获取循环变量项的Bar。f=>f.[这里没有横条,只有Foos]`@TheOtherGuy,我看到的大多数示例都将标签硬编码为表头,然后在每个表头之后执行for。你在桌子上展示你的吗?你为什么需要在foreach中使用标签(它只会不断地为每一行重复你的标签)@Manatherin我有一个Foo对象的集合,我正试图为每个表行中的每个Foo显示Bar属性。这不是他想要的。问题是,我不知道如何指定属性栏。它是f=>f.Bar
(不编译)还是item=>item.Bar
(也不编译)@TheOtherGuy-关于Html.LabelFor(x=>item.Bar)
我如何使用item
?当我执行item=>item.Bar
时,我得到一个名为item的参数不能在此范围内声明
我将尝试此方法,但无法使用foreach
?LabelFor将表达式作为参数,因此您无法将其传递给对象(因此您无法将其传递给项目变量)。您要求使用foreach示例,我提供了一个有效的示例,但随后您接受了不使用foreach的答案。这种方法的缺点是,你最终会得到多个“太棒了”。但我不知道怎么做,为什么。解释不匹配的必要性将有助于NOOB。相关问题:我如何做到这一点,并让TextBoxFor
为每个项目生成不同的ID,以便正确更新?
@foreach (Foo foo in Model)
{
<p>
@(Html.LabelForItem<Foo, string>(foo, f => f.Name))
</p>
}