ASP.NET MVC 5 - LabelFor 显示 属性 名称而不是值,但 TextBoxFor 可以正常使用相同的 属性

ASP.NET MVC 5 - LabelFor displays property name instead of value, but TextBoxFor works fine with the same property

我正在处理分配了 IList<MyModel> 模型的视图,但我一直坚持使用 LabelFor 显示值(显示 属性 名称而不是其值),但是,即使与 属性.

一起使用,TextBoxFor 也能正常工作

部分查看代码:

@model IList<MyModel>

  @for (var i = 0; i < Model.Count; i++)
    {
        <tr>
            <td>@Html.LabelFor(m => m[i].Code)</td>
            <td>@Html.TextBoxFor(m => m[i].Price)</td>
        </tr>
   }

型号class:

public class MyModel
  {
    public string Code { get; set; }

    public double Price { get; set; }
  }

@Html.TextBoxFor(m => m[i].Code) 也可以正常工作,所以这个问题显然与 属性 本身无关。

我可以只使用 Label(),但我需要 POST 表单中的值,所以我还必须为 Code 添加一个隐藏字段,我觉得它不是最优雅的解决方案。

为什么 TextBoxFor 有效,但 LabelFor 无效?

LabelFor 显示字段的名称(用于为控件创建标签)。

如果要显示字段的,请使用DisplayFor:

<tr>
    <td>@Html.DisplayFor(m => m[i].Code)</td>
    <td>@Html.TextBoxFor(m => m[i].Price)</td>
</tr>

注意: DisplayFor 仅显示提交表单时不包含的文本值(如标签)。如果您需要使用 form/model 返回值,那么您需要添加一个隐藏字段。您可以使用 @Html.HiddenFor(m => m[i].Code) 这将创建一个隐藏的输入,呈现为 <input type="hidden" name="myModels[0].Code" value="abc" />.

LabelFor的第一个参数定义了标识要显示的属性的表达式,第二个参数显示的是texl标签。

LabelExtensions.LabelFor Method

@for (var i = 0; i < Model.Count; i++)
{
    <tr>
        <td>@Html.LabelFor(m => m[i].Code, Model[i].Code)</td>
        <td>@Html.TextBoxFor(m => m[i].Price)</td>
    </tr>
}