2015-02-09 3 views
2

Проверка ASP.NET MVC показывает ошибки после загрузки страницы (в ValidationSummary), я хочу показать ее после нажатия кнопки «отправить». Мой код:Проверка ASP.NET MVC показывает ошибки после загрузки страницы

расположение:

<html lang="en"> 
<head> 
    @Styles.Render("~/Content/css") 
    @RenderSection("head", required: false) 
    @Scripts.Render("~/bundles/modernizr") 
</head> 
<body> 
    @RenderBody() 

    @Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 
</body> 
</html> 

страница:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary() 
.... 
} 

@section Head { 
    @Styles.Render("~/styles/jquery-ui-bootstrap-custom-theme") 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
    @Scripts.Render("~/bundles/jqueryui") 

расслоением файл имеет:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
       "~/Scripts/jquery-{version}.js")); 

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
       "~/Scripts/jquery.validate*")); 

Контроллер:

 public ActionResult VacancyForm(int? ID, VacancyFormViewModel model) 
     { 
      VacancyFormViewModel model = new VacancyFormViewModel(); 
.... 
      return View(model); 
     } 
+1

Вам нужно показать методы контроллера –

+0

, но какой смысл в контроллере? –

+1

Это метод GET или POST? (если его GET, то это ваша проблема!) –

ответ

2

У вас не должно быть параметра в методе GET, который является сложным объектом (в вашем случае VacancyFormViewModel). Помимо уродливой строки запроса это создает;

  1. если модель содержит большое количество свойств, или свойства с длинных значениями, она будет превышать предел строки запроса и выбросить исключение;
  2. если модель содержит свойства, которые являются сложными объектами или коллекции, то связывание потерпит неудачу (внутренне значение маршрута словаря генерируется на основе ToString() стоимости имущества)

В вашем случае, DefaultModelBinder инициализирует новый экземпляр VacancyFormViewModel и устанавливает значения его свойств (которые могут или не могут быть успешными на основе вышеуказанных пунктов). Поскольку у вас есть атрибуты проверки для одного или нескольких свойств, эти ошибки добавляются к ModelState и поэтому отображаются в форме.

Если метод предназначен для создания нового VacancyFormViewModel, тогда просто инициализируйте новый экземпляр модели в методе. Если его для редактирования существующего VacancyFormViewModel, передайте ID в качестве параметра и получите объект из репозитория на основе идентификатора.

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