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

时间:2015-03-17 10:17:46

标签: 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)

将第二个参数传递给@Html.TextBox时是否有理由对该字段进行验证但是没有出现“验证消息”?

@Html.RequiredLabelFor(x => x.FirstName)
@Html.TextBoxFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)

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

根据我的理解,实际财产没有得到承认?

支持财产:

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

2 个答案:

答案 0 :(得分:12)

不显眼的验证库会识别显示“'使用name属性。并不是指定额外的属性会阻止它工作,但是你已经更改了name属性而没有在验证帮助器中反映新名称。

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

@Html.ValidationMessage("1.first_name")

上述方法 除非 您正在使用JS / JQuery来验证和提交表单数据(通过AJAX),由于斯蒂芬在回答这个问题时给出的理由。

答案 1 :(得分:5)

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

<input name="1.first_name" ... />
<span .. data-valmsg-for="FirstName" ..></span> // There is no control named FirstName