缺少值属性.NET Core MVC HiddenFor helper

时间:2018-09-19 12:38:03

标签: c# .net razor asp.net-core asp.net-core-mvc

由于某种原因,尽管.NET Core(2.1.4)MVC中的HiddenFor帮助器没有在隐藏的输入元素上设置值,尽管它表示的模型属性上存在该值。

如果我手动创建一个隐藏属性并使用IdFor,NameFor并手动设置它可以正常工作的值。

    // This works and has a value attribute with a value
    <input type="hidden" id="@Html.IdFor(x => x.Fields[componentIndex].Value)" name="@Html.NameFor(x => x.Fields[componentIndex].Value)" value="@Model.Fields[componentIndex].Value"/>

    // This has a value attribute but it's empty
    @Html.HiddenFor(x => x.Fields[componentIndex].Value)

请注意,在两种情况下,生成的名称和ID都是相同的。

如果我使用HiddenFor并为new { @Value=... }提供值,则它也不会设置。

设置值(使用相同的代码但使用不同的组件索引)的HiddenFor的唯一区别在于,它们是在发布时提供的,而有问题的是在控制器中设置的。

1 个答案:

答案 0 :(得分:2)

ASP.NET Core中,您可以使用tag helper asp-for,这样隐藏的内容将类似于:

<input asp-for="ModelPropertyName" type="hidden" />

但是对于将列表绑定到POST控制器动作,有时更容易显式地呈现隐藏内容(就像您一样),因为隐藏的输入名称应遵循集合绑定命名格式,例如Fields[i].Value ,其中i是集合索引。

有关集合绑定的更多详细信息,请检查Model Binding in ASP.NET Core