缺少值属性.net core mvc HiddenFor helper

neo*_*aze 0 .net c# razor asp.net-core-mvc asp.net-core

由于某种原因,.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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dmi*_*lov 5

ASP.NET Core您可以使用标签助手 ,这样asp-for隐藏的内容将如下所示:

<input asp-for="ModelPropertyName" type="hidden" />
Run Code Online (Sandbox Code Playgroud)

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

有关集合绑定的更多详细信息,请查看ASP.NET Core 中的模型绑定