Подтвердить что ты не робот

Как использовать html.ValidationMessageFor

Я пытаюсь получить свое представление, чтобы дать мне сообщение об ошибке рядом с текстовым полем, если пользователь вводит что-то недействительное (например, строку, где он ожидает число). Вместо этого я получаю уродливую страницу с сообщением о том, что проверка не прошла, когда пользователь нажимает кнопку submit.

Вот часть моего представления:

@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(), когда они выходят из этого текстового поля, чтобы они могли видеть это прежде чем они нажимают кнопку submit. Мне не хватает некоторых jquery, чтобы это произошло? Может быть, какое-то использование заявления, которое мне нужно включить?

4b9b3361

Ответ 1

Это было глупо просто..... Я просто не добавлял поле ErrorMessage в качестве части декоратора [Требуется]. Например:

[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 не выполняется, и пользователь получает небольшое сообщение, сообщающее им, что неправильно.