2012-02-09 10 views
8

Mam akcję, która zapisuje rekord, wywołując metodę Save jednostki BLL. Jednostka dba o własną wewnętrzną walidację i jeśli pole jest wymagane, ale nie sprawdza poprawności, ponieważ użytkownik nie wprowadził wartości, to jednostka zgłasza błąd. Łapię ten błąd w mojej akcji i zwracam ten sam widok. Problem polega na tym, że błąd nie jest wyświetlany w moim ValidationSummary.Błędy ModelState nie są wyświetlane w widoku

Tak, zdaję sobie sprawę, że mam weryfikację modelu widoku przez attibute z MVC, ale ta jednostka jest używana w innym miejscu i musi mieć nadmiarowe sprawdzanie poprawności, jeśli interfejs użytkownika nie wykonuje/nie może tego zrobić, na przykład w zadaniu wsadowym.

Oto moje działanie:

public ActionResult Edit(EntityModel model) { 
    if (ModelState.IsValid) { 
     var entity = new Entity(model.ID, model.Name, model.IsActive); 
     try { 
      entity.Save(User.Identity.Name); 
      return RedirectToAction("List"); 
     } 
     catch (Exception ex) { 
      ModelState.AddModelError("", ex.Message); 
     } 
    } 
    return View(model); 
} 

Tutaj jest moim zdaniem:

@model ELM.Select.Web.Models.EntityModel 

@{ 
    ViewBag.Title = "Edit"; 
} 

<h2>Edit</h2> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>DefermentTypeViewModel</legend> 

     @Html.HiddenFor(model => model.ID) 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.IsActive) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.IsActive) 
      @Html.ValidationMessageFor(model => model.IsActive) 
     </div> 

     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

Dlaczego nie błąd dodaję do ModelState być pokazane w moim ValidationSummary?

Odpowiedz

19

Zmień swój kod Widok:

@Html.ValidationSummary(true)

do:

@Html.ValidationSummary(false)

Zgodnie the MSDN Reference on ValidationSummary(), tutaj jest definicja metody:

public static MvcHtmlString ValidationSummary(
    this HtmlHelper htmlHelper, 
    bool excludePropertyErrors 
) 

Zauważ, żeParametr, jeśli ustawisz go na true (jak pierwotnie zrobiłeś), wykluczysz błędy właściwości. Zmień to na false i to powinno ci dać to, czego chcesz.

+1

To było to !! Dzięki! –

+0

@CDSmith Cieszę się, że mogę Ci pomóc. :) –

+3

Wiem, że to jest stare i wszystkie, ale czy jestem jedynym, który jest zdezorientowany i tak naprawdę nie myśli, że to jest odpowiedź? Parametr bool to "excludePropertyErrors". Metoda użyta do dodania błędu to 'ModelState.AddModelError' - więc dodajemy ** błąd ** i wykluczyliśmy ** błędy ** właściwości, więc jaki jest problem? Dlaczego wyświetlanie ** błędów ** wyświetla komunikat o błędzie ** model **? Jest to błąd w podsumowaniu sprawdzania poprawności lub źle nazwana metoda ModelState, prawda? –

Powiązane problemy