Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ModelState.AddModelError is not being displayed inside my view

I have the following view,, which create 10 ajax.beginform ,, But the problem that i am facing is that incase an error occurs during the creation of the object then the ModelState.AddModelError will not be shown on the view although i have set the @Html.ValidationSummary(true) The view looks as follow

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

And my action method which defines the ModelState.AddModelError looks as follow:-

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

So how i can show the ModelState.AddModelError on my view.

like image 953
john Gu Avatar asked May 02 '12 02:05

john Gu


People also ask

How do I show ModelState error in view?

To pass error to the view we can use ModelState. AddModelError method (if the error is Model field specific) or simply ViewBag or ViewData can also be used.

Why is my ModelState IsValid false?

IsValid is false now. That's because an error exists; ModelState. IsValid is false if any of the properties submitted have any error messages attached to them. What all of this means is that by setting up the validation in this manner, we allow MVC to just work the way it was designed.

What is ModelState AddModelError?

AddModelError(String, String) Adds the specified error message to the errors collection for the model-state dictionary that is associated with the specified key.


1 Answers


I would urge you to change your try{ } catch(){ }

And first check if there exists a visit for the given id and if so simply returns the model with the added model error

    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 

Change your AddModelError To

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

And in your view simply add a

@Html.ValidationMessage("CustomError") 

Then when you return your model the error will be shown where you have placed the @Html.ValidationMessage ...

like image 174
Syneryx Avatar answered Sep 22 '22 10:09

Syneryx