由于某种原因,尽管.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的唯一区别在于,它们是在发布时提供的,而有问题的是在控制器中设置的。
答案 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