2013-10-09 3 views
19

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

Вот часть моего зрения:

@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; } 

В методе после моего контроллера я не забудьте использовать

if (ModelState.IsValid) 

Если пользователю было введено что-то вроде 50 символов в тексте первого имени bo x, я хочу, чтобы ошибка отображалась с помощью Html.ValidationMessageFor(), когда они выходят из этого текстового поля, поэтому они могут видеть это, прежде чем они нажимают кнопку submit. Мне не хватает некоторых jquery, чтобы это произошло? Может быть, какое-то использование заявления, которое мне нужно включить?

+2

показать мне, пожалуйста, полную модель и код контроллера. и какая уродливая ошибка вы получаете? это поможет. – Dvir

ответ

37

Это было глупо просто ..... Я просто не добавлял поле 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 не получает обработанные, а пользователь получает небольшое сообщение о них что не так.

+2

Спасибо за ответ! Это помогло мне! Следует отметить, что вы также можете определить сообщение проверки в представлении следующим образом: @ Html.ValidationMessageFor (x => x.ZipCode, «Zip-коды могут быть только 5 цифр») –

+0

So ValidationMessage, связанный с ErrorMessage? – pluto20010

Смежные вопросы