【问题标题】:Missing value attribute .net core mvc HiddenFor helper缺少值属性.net core mvc HiddenFor helper
【发布时间】:2018-09-19 12:38:02
【问题描述】:

由于某种原因,.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 之间的唯一区别(使用相同的代码但不同的组件索引)是它们是在发布时提供的,而这个有问题的是在控制器中设置的。

【问题讨论】:

  • 您需要向您展示控制器代码(很可能是 ModelState 问题 - 请参阅 TextBoxFor displaying initial value, not the value updated from code
  • 与我们分享.csproj 的内容或重现您的问题的项目。我用@Html.HiddenFor(x =&gt; x.Id)Asp.net Core 2.1下做了一个测试,将Microsoft.NETCore.AppMicrosoft.AspNetCore.App升级到2.1.4,结果是正确的&lt;input data-val="true" data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="1"&gt;

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


【解决方案1】:

ASP.NET Core 中你可以使用tag helper asp-for 所以隐藏的看起来像:

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

但是对于绑定列表POST控制器操作有时更容易显式地呈现隐藏(就像你做的那样),因为隐藏的输入名称应该遵循集合绑定命名格式,如@987654327 @,其中i 是集合索引。

更多集合绑定检查Model Binding in ASP.NET Core

【讨论】:

  • 这对我有用: ?
猜你喜欢
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2019-08-29
  • 1970-01-01
相关资源
最近更新 更多