C# 来自模型集合的ASP.NET HTML.LabelFor

C# 来自模型集合的ASP.NET HTML.LabelFor,c#,asp.net,asp.net-mvc,ienumerable,html.labelfor,C#,Asp.net,Asp.net Mvc,Ienumerable,Html.labelfor,好的,我对ASP.NET4.5非常陌生,这给了PHP一个休息的机会,并且一直在渲染标签 我有一个ViewModel,它定义了必要的模型: public class TransactionsViewModel { public IEnumerable<Transaction> Transactions { get; set; } public IEnumerable<Area> Areas { get; set; } public IEnumer

好的,我对ASP.NET4.5非常陌生,这给了PHP一个休息的机会,并且一直在渲染标签

我有一个ViewModel,它定义了必要的模型:

 public class TransactionsViewModel {
    public IEnumerable<Transaction> Transactions { get; set; }
    public IEnumerable<Area> Areas { get; set; }

    public IEnumerable<Mistake> Mistakes { get; set; }
    ...
 }
这意味着HTMLHelper在重写时的类型为

我尝试创建的prototyope方法是:

public static MvcHtmlString LabelFor<TModel, TClass, TValue>(
        this HtmlHelper<TModel> helper,
        IEnumerable<TClass> model,
        Expression<Func<TClass, TValue>> expression,
        object htmlAttributes
    )
其中,是事务视图模型强类型,是事务

这在尝试调用helper.LabelFor时会导致问题,因为这需要表达式>,但我需要传递Func


我试图用有效类型重建表达式,但在调用html.labelfor时遇到了问题,类型转换无法工作。

我不确定为什么需要重写labelfor。你可以这样试试-

@Html.LabelFor(model=>model.Transactions.First().Property)
更新

使用FirstOrDefault而不是First以避免异常

 @Html.LabelFor(model=>model.FirstOrDefault().Property)

你能解释一下你期望的结果是什么吗。您正在尝试为集合创建标签或集合中某项的属性。第一个是没有意义的,因为元素与单击其集合焦点的表单控件相关联,并且您不能拥有集合的表单控件My ViewModel具有事务集合。我想显示Transaction.Property的标签。我希望调用我的覆盖:html.labelforModel.Transactions,t=>t.propertyModel.Transactions为空时会发生什么?将引发异常。试试@Html.LabelFormmodel=>model.Transactions.FirstOrDefault.PropertyYeah,我不想假设事务总是包含对象,因为存在其为空的场景。因此,我必须重建一个表达式,将TClass更改为TModel,以便Html.Labelform可以接受它。问题将是TModel是TransactionViewModel,而TClass是事务。是,请使用FirstOrDefault。即使你没有将模型传递给视图,这也会起作用。我只是认为这种方法很粗糙,并试图避免它。我认为最好的方法是超控。我正在复制一个函数,我发现它做了同样的事情,只是用于DisplayFor。不知道是谁投了反对票,但我希望他们能给出一个理由?
 @Html.LabelFor(model=>model.FirstOrDefault().Property)