【问题标题】:MVC 6 asp-validation-summary omits property name for validation on hidden inputMVC 6 asp-validation-summary 省略了隐藏输入验证的属性名称
【发布时间】:2017-02-10 18:46:50
【问题描述】:

我的Create 视图中有模型EmployeeBindingModel 的以下标记:

<div asp-validation-summary="All" class="text-danger"></div>
<input type="hidden" asp-for="EmployeeId" />

如果我让愚蠢的脚手架 Create 操作保持原样,它会将空模型传递给视图,尽管控制器是为 EmployeeBindingModel 键入的。然后在提交时,客户端验证根本不起作用,但这是另一个问题的主题。

这个问题是为什么控制器的模型验证只为EmployeeId返回以下消息,没有属性名称?

The value '' is invalid.

【问题讨论】:

  • 为什么The 在该代码的 SO 渲染中设置为蓝色?
  • 默认情况下,客户端验证不适用于隐藏字段。 JQuery默认设置说ignore: ":hidden"。
  • @MaxMokrousov 为什么不尝试将其作为答案,并建议如何更改有问题的“忽略隐藏”默认值?我很乐意接受。

标签: asp.net asp.net-mvc validation asp.net-core-mvc


【解决方案1】:

客户端 jQuery 验证的默认值为 ignore hidden fields.

忽略(默认:":hidden") 类型:选择器。验证时要忽略的元素,只需将它们过滤掉。使用 jQuery 的 not 方法,因此 not() 接受的所有内容都可以作为此选项传递。提交和重置类型的输入总是被忽略,禁用的元素也是如此

要修复它,您可以覆盖。

@section Scripts {
   @Scripts.Render("~/bundles/jqueryval")
      <script type="text/javascript">
        $.validator.setDefaults({
             ignore: ""
        });
      </script>
}

【讨论】:

  • 谢谢,这可能很有用。尽管照原样,您的代码将忽略除 submitreset 之外的所有元素。虽然忽略值是一个选择器,所以我可以使用类来更有选择性。
【解决方案2】:

我认为您需要提供一个名称,以便控制器获取它。

<input type="hidden" name="EmployeeId" asp-for="EmployeeId" />

如果您想使用 Razor,可以使用以下方法:

@Html.HiddenFor(model => model.EmployeeId)

【讨论】:

  • 我用过Razor,现代版,即MVC 6,ASP.NET Core,其中&lt;input type="hidden" asp-for="EmployeeId" /&gt;的意思和@Html.HiddenFor(model =&gt; model.EmployeeId)完全一样。
  • 啊,我明白了,抱歉。不知道这个。
  • 与时俱进,克里斯。 :-) MVC Core 的宝石使 MVC 5 看起来像一个粪球。这一切都是免费和开源的,甚至所需的 IDE 也是免费的。
猜你喜欢
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多