如何使用html.ValidationMessageFor

我试图让我的视图在文本框旁边给出错误消息,如果用户输入无效的东西(比如字符串,它预期一个数字)。 相反,我得到一个丑陋的错误页面,说用户按下提交时validation失败。

以下是我的观点的一部分:

@model MembershipTest.ViewModels.AddDriverViewModel   @{ Layout = "~/Views/Shared/_Layout.cshtml"; ViewBag.Title = "Add Drivers"; } @using (Html.BeginForm("AddDriver", "Driver")) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) 
Customer Information

这是我的模型的相关部分:

 [Required] [StringLength(30)] public string F_Name { get; set; } [Required] [StringLength(30)] public string L_Name { get; set; } 

在我的控制器的post方法中,我一定要使用

 if (ModelState.IsValid) 

如果用户碰巧在名字文本框中输入了大约50个字符的内容,我希望当他们跳出该文本框时使用Html.ValidationMessageFor()权限显示错误,这样他们就可以在按下之前看到它提交。 我错过了一些jquery来实现这一目标吗? 也许我需要包含一些使用声明?

这很简单…..我只是没有将ErrorMessage字段添加为[Required]装饰器的一部分。 例如:

 [Required(ErrorMessage = "First name is required")] [StringLength(30, ErrorMessage = "Name can be no larger than 30 characters")] public string F_Name { get; set; } [Required(ErrorMessage = "Last name is required")] [StringLength(30, ErrorMessage = "Name can be no larger than 30 characters")] public string L_Name { get; set; } 

现在,如果用户要么没有在名称字段中输入任何内容,要么输入超过30个字符的内容,则Post方法不会被执行,并且用户会收到一条消息,告诉他们出了什么问题。

@Html.Label("First Name:") @Html.TextBoxFor(m => m.Driver.F_Name) @Html.ValidationMessageFor(m => m.Driver.F_Name) @Html.Label("Gender:") @Html.RadioButtonFor(m => m.isMaleChecked, "true") Male @Html.RadioButtonFor(m => m.isMaleChecked, "false")Female
@Html.Label("Last Name:") @Html.TextBoxFor(m => m.Driver.L_Name) @Html.ValidationMessageFor(m => m.Driver.L_Name)