如果用户输入的内容无效(如字符串中预期的数字),我正试图让我的视图在文本框旁边给出错误消息。相反,我收到一个丑陋的错误页面,表示当用户按下提交时验证失败。
以下是我的观点的一部分:
@model MembershipTest.ViewModels.AddDriverViewModel
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Add Drivers";
}
@using (Html.BeginForm("AddDriver", "Driver"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Customer Information</legend>
<table>
<tr>
<td>
@Html.Label("First Name:")
@Html.TextBoxFor(m => m.Driver.F_Name)
@Html.ValidationMessageFor(m => m.Driver.F_Name)
</td>
<td>
@Html.Label("Gender:")
@Html.RadioButtonFor(m => m.isMaleChecked, "true") Male
@Html.RadioButtonFor(m => m.isMaleChecked, "false")Female
</td>
</tr>
<tr>
<td>
@Html.Label("Last Name:")
@Html.TextBoxFor(m => m.Driver.L_Name)
@Html.ValidationMessageFor(m => m.Driver.L_Name)
</td>
以下是我模型的相关部分:
[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来实现这个目标吗?也许我需要包含一些使用声明?
答案 0 :(得分:39)
这很简单.....我只是没有将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方法就不会被执行,用户会收到一条消息,告诉他们&#39错了。