2015-09-17 2 views
1

Я пытаюсь отобразить ошибки проверки с использованием встроенной системы проверки MVC. Я использую следующий код для моего контроллера:Отображение ошибок проверки с использованием MVC

[HttpPost] 
     public ActionResult SaveApplication(ApplicationModel application) 
     { 
      if (!ModelState.IsValid) 
      {     
       return View("New",application); 
      } 

      ApplicationBLL.SaveApplication(application); 
      return Content(string.Empty); 
     } 

Хотя мой взгляд выглядит следующим образом:

<tr> 
     <td>Name</td> 
     @Html.ValidationSummary(true) 
     <td>@Html.TextBoxFor(m => m.Name)</td> 
     <td>@Html.ValidationMessageFor(m => m.Name, "Name is required")</td> 
    </tr> 

Ниже показано, как класс модели выглядит следующим образом:

public class ApplicationModel 
    { 
     public int ApplicationId { get; set; } 

     public string ApplicationNumber { get; set; } 

     [Required] 
     public string Name { get; set; } 

     public DateTime EventDate { get; set; } 

     public string EventAddress { get; set; } 
} 

Моя модель имеет [ Обязательный параметр] проверка на свойство имени и когда я помещаю отладчик на свой контроллер, он распознает, что ModelState недействителен и возвращается обратно в представление, но я делаю n если на моей странице не обнаружены ошибки. Возможно, мне не хватает чего-то очень тривиального, так как это мой первый раз, используя структуру проверки MVC.

Одна вещь, которую я хотел бы добавить, это то, что я вызываю контроллер с Ajax Post Может ли это способствовать этой аномалии?

+0

Не уверен, что ваш запрашиваемым. Вы указали сообщение проверки в представлении (в качестве «Имя требуется»), которое будет отображаться. Ожидаете ли вы «Это тест»? –

+0

Я удалил код контроллера, добавив пользовательскую ошибку. Спасибо, что указал, это было странно. Моя проблема заключается в том, что на представлении ничего не появляется, когда я ожидаю, что ошибка с подтверждением не должна отображаться где-то на странице. – TeaLeave

+1

Украсить ваше свойство 'Обязательным (ErrorMessage =" Name required ")] public string Name {get; задавать; } 'В представлении используйте только' @ Html.ValidationMessageFor (m => m.Name) 'и в контроллере просто' if (! ModelState.IsValid) {return View (application); } '. Если вы отправите форму без текста в элементе управления Name, вы увидите сообщение об ошибке (и если проверка на стороне клиента включена и включенные скрипты - сообщение будет отображаться, и оно даже не будет отправлено) –

ответ

1
<td>@Html.ValidationMessageFor(m => m.Name, "Name is required")</td> 

Этого вспомогательный метод генерирует пролет с атрибутом ниже:

data-valmsg-replace="false" 

означает, что вы увидите сообщение об ошибке статического ниже вашего поля, но вы не будете в состоянии изменить это поле с ваше сообщение об ошибке, определенное в модели. Опять же, вы увидите некоторое статическое сообщение об ошибке под вашим полем. Если решение @stephen muecke работает, значит, ваша проблема не в том, чтобы добавить ErrorMessage в неправильное место. Единственное различие, которое я вижу между вашим кодом и @ ответ Стефана

return View("New",application); 

изменен

return View(application); 

Это означает, что, возможно, вы возвращали неправильный вид из вашего действий.

+0

Имя моего вида - «Новое», поэтому мне нужно вернуться («Новое», приложение) ;. А также он загружает представление, которое я подтвердил, поставив точку останова. Таким образом, загружается правильный вид + модель с недопустимым modelstate. Тем не менее я не вижу ошибки – TeaLeave

+0

Кроме того, я вызываю контроллер с Ajax. Разве это из-за этого? – TeaLeave

+0

@CoffeeBean, какой синтаксис вы используете для формы post action? jquery '$ .ajax()' или Razor 'Ajax.BeginForm()'? – rustem

0

Попробуйте это,

Добавить модель Ошибка в действии

ModelState.AddModelError("keyName","Error Message"); 

Используйте это, чтобы отобразить в виде

@Html.ValidationMessage("keyName") 
Смежные вопросы