【问题标题】:How to use html.ValidationMessageFor如何使用 html.ValidationMessageFor
【发布时间】:2013-10-09 19:59:47
【问题描述】:

如果用户输入了无效的内容(例如需要数字的字符串),我试图让我的视图在文本框旁边给我错误消息。相反,当用户按下提交时,我收到一个丑陋的错误页面,提示验证失败。

这是我的部分观点:

@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 来实现这一点?也许我需要包含一些 using 语句?

【问题讨论】:

  • 请向我展示您的完整型号和控制器代码。你得到什么丑陋的错误?会有帮助的。

标签: c# jquery asp.net-mvc-4


【解决方案1】:

这很简单......我只是没有将 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.ValidationMessageFor(x => x.ZipCode, "Zip Codes can only be 5 digits")
  • 那么ValidationMessage与ErrorMessage有关吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
相关资源
最近更新 更多