2012-02-09 16 views
8

Ho un'azione che salva un record chiamando il metodo Save dell'entità BLL. L'entità si prende cura della propria convalida interna e se un campo è richiesto ma fallisce la convalida perché un utente non ha inserito un valore allora l'entità genera un errore. Sto riscontrando questo errore nella mia azione e restituisco la stessa vista. Il problema è che l'errore non viene visualizzato nel mio ValidationSummary.Errori ModelState non visualizzati in vista

Sì. Mi rendo conto che la convalida del modello di vista è stata eseguita da attibute con MVC ma questa entità è utilizzata altrove e deve avere convalida ridondante se l'interfaccia utente non lo può/non può farlo, ad esempio utilizzato in un processo di assistenza batch.

Qui è la mia azione:

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

Qui è la mia opinione:

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

Perché non l'errore aggiungo a ModelState essere mostrato nel mio ValidationSummary?

risposta

19

modificare il codice Vista:

@Html.ValidationSummary(true)

a:

@Html.ValidationSummary(false)

Come da the MSDN Reference on ValidationSummary(), ecco la definizione del metodo:

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

Si noti che ilParametro, se lo si imposta su true (come è stato originariamente fatto) si escludono errori di proprietà. Cambia quello in false e questo dovrebbe farti ottenere quello che vuoi.

+1

E 'stato così !! Grazie! –

+0

@CDSmith Felice di aiutare. :) –

+3

So che questo è vecchio e tutto, ma sono l'unico confuso e non penso davvero che questa sia la risposta? Il parametro bool è 'excludePropertyErrors'. Il metodo utilizzato per aggiungere un errore è 'ModelState.AddModelError' - quindi aggiungiamo un errore ** model ** e escludiamo ** property ** errori, quindi qual è il problema? Perché mostrare errori ** property ** mostra l'errore ** model ** aggiunto? È un bug nel riepilogo di convalida o un metodo ModelState scarsamente chiamato, giusto? –

Problemi correlati