2012-05-02 12 views
32

Mam następujący widok, który utworzyć 10 ajax.beginform ,, Ale problem, który stoję, to to, że przy wystąpieniu błąd występuje podczas tworzenia obiektu następnie ModelState nie będzie udostępniana .AddModelError na widoku chociaż mam ustawić @Html.ValidationSummary(true) widok wygląda jak postępowaćModelState.AddModelError nie jest wyświetlany wewnątrz mojego widoku

@model Medical.Models.VisitLabResult 

@for (int item = 0; item < 10; item++) 
{ 
    <tr id = @item> 
    @using (Ajax.BeginForm("CreateAll", "VisitLabResult", new AjaxOptions 
    { 
     HttpMethod = "Post", 
     UpdateTargetId = item.ToString() + "td", 
     InsertionMode = InsertionMode.Replace, 
     LoadingElementId = "progress2", 
     OnSuccess = string.Format(
      "disableform({0})", 
      Json.Encode(item)), 
    })) 
    { 
     @Html.ValidationSummary(true) 

     @Html.AntiForgeryToken() 
     <td> 
      @Html.DropDownList("LabTestID", String.Empty) 
      @Html.ValidationMessageFor(model => model.LabTestID) 
     </td> 
     <td> 
      @Html.EditorFor(model => model.Result) 
      @Html.ValidationMessageFor(model => model.Result) 
     </td> 

     <td> 
      @Html.EditorFor(model => model.DateTaken) 
      @Html.ValidationMessageFor(model => model.DateTaken) 
     </td> 

     <td> 
      @Html.EditorFor(model => model.Comment) 
      @Html.ValidationMessageFor(model => model.Comment) 
     </td> 

     <td> 
      <input type="submit" value="Create" /> 
     </td> 

     <td id = @(item.ToString() + "td")> 
     </td> 
    } 
    </tr> 
    } 
</table> 

i mój sposób działania, który określa ModelState.AddModelError wygląda następująco: -

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult CreateAll(VisitLabResult vlr, int visitid = 28) 
{ 
    try 
    { 
     if (ModelState.IsValid) 
     { 
      var v = repository.GetVisit(visitid); 
      if (!(v.EligableToStart(User.Identity.Name))){ 
       return View("NotFound"); 
      } 
      vlr.VisitID = visitid; 
      repository.AddVisitLabResult(vlr); 
      repository.Save(); 

      return Content("Addedd Succsfully"); 
     } 
    } 
    catch (DbUpdateException) 
    { 
     JsonRequestBehavior.AllowGet); 
     ModelState.AddModelError(string.Empty, "The Same test Type might have been already created,, go back to the Visit page to see the avilalbe Lab Tests"); 
    } 
} 

W jaki sposób można wyświetlić element ModelState.AddModelError w moim widoku.

Odpowiedz

57


Namawiam zmienić try{ } catch(){ }

I najpierw sprawdzić, czy istnieje wizytę dla danego id a jeśli tak, po prostu zwraca model z błędu modelu dodanej

if (visitExists) 
    { 
     ModelState.AddModelError("CustomError", "The Same test Type might have been already created,, go back to the Visit page to see the avilalbe Lab Tests"); 
     return View(vlr);  
    } 
    //Other code here 

Zmień AddModelError Aby

ModelState.AddModelError("CustomError", "The Same test Type might have been already created,, go back to the Visit page to see the avilalbe Lab Tests"); 

A Pana zdaniem po prostu dodać

@Html.ValidationMessage("CustomError") 

Następnie po powrocie model błąd zostanie pokazany w którym został umieszczony @ Html.ValidationMessage ...

+0

Jak można obsłużyć html owijając komunikat o błędzie? Potrzebujesz tylko HTML (np. Alert ładowania), aby pokazać, kiedy wystąpił błąd. – Ciwan

8

@Html.ValidationSummary(true) pokazuje tylko komunikat o propertys modelu, jeśli chcesz pokazać także dodatkową wiadomość, dodano

ModelState.AddModelError(
    "CustomError", 
    "The Same test Type might have been already created, go back to the Visit page to see the avilalbe Lab Tests"); 

trzeba ustawić @Html.ValidationSummary(false) Jeśli trzeba dis odtwarzaj komunikat sprawdzania poprawności w pobliżu pól wejściowych, aby ustawić @Html.ValidationSummary(true) i postępować zgodnie z instrukcjami sugerowanymi przez Syneryx

5

Możesz użyć ze słownika ViewData w widoku, aby uzyskać dostęp do danych ModelState.

Na przykład:

w akcji:

ModelState.AddModelError("CustomError", "Error 1"); 
ModelState.AddModelError("CustomError", "Error 2"); 

i dostaję komunikat "Error 1":

ViewData.ModelState["CustomError"].Errors[0].ErrorMessage 
Powiązane problemy