Razor @ Html.ValidationMessageFor()没有显示"验证错误消息"

Chr*_*mut 5 c# asp.net-mvc razor

@Html.RequiredLabelFor(x => x.FirstName)
@Html.TextBoxFor(model => model.FirstName, new { Name = "1.first_name", tabindex = "1" })
@Html.ValidationMessageFor(model => model.FirstName)
Run Code Online (Sandbox Code Playgroud)

将第二个参数传递给@Html.TextBox时是否有原因正在验证该字段但是没有出现"验证消息"?

@Html.RequiredLabelFor(x => x.FirstName)
@Html.TextBoxFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
Run Code Online (Sandbox Code Playgroud)

当使用只接受一个参数(lambda表达式)的重载时,"验证消息"正在正确显示.

据我所知,实际的财产没有得到承认?

支持财产:

[StringLength(100, ErrorMessage = "Max length 100 characters")]
[Required(ErrorMessage = "This field is required")]
[Display(Name = "First name")]
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

Ins*_*rel 12

不显眼的验证库使用name属性标识"要显示验证的内容".并不是指定额外的属性会阻止它工作,但是你已经更改了name属性而没有反映验证助手中的新名称.

您可以停止更改文本框助手中的name属性(如果使用默认模型绑定器返回视图,则必需),或者您可以使用

@Html.ValidationMessage("1.first_name")
Run Code Online (Sandbox Code Playgroud)

除非您使用JS/JQuery来验证和提交表单数据(通过AJAX),否则上述方法不是一个好主意,原因是Stephen对此答案的评论.


小智 6

您已经更改了name属性,因此它不仅不会回发并绑定到您的模型,jquery.validate.unobtrusive现在不再匹配控件,因为输入的名称与关联的验证消息不同

<input name="1.first_name" ... />
<span .. data-valmsg-for="FirstName" ..></span> // There is no control named FirstName
Run Code Online (Sandbox Code Playgroud)