Вопрос по asp.net-mvc-3 – ModelState.AddModelError не отображается в моем представлении

40

У меня есть следующее представление ,, которое создает 10 ajax.beginform ,, Но проблема, с которой я сталкиваюсь, заключается в том, что если во время создания объекта возникает ошибка, то ModelState.AddModelError не будет отображаться в представлении, хотя я установил@Html.ValidationSummary(true) Вид выглядит следующим образом

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

И мой метод действия, который определяет ModelState.AddModelError, выглядит следующим образом:

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

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

Ваш Ответ

3   ответа
8

@Html.ValidationSummary(true) s propertys, if you want to show also the added message, added with

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

вам нужно установить @Html.ValidationSummary(false) Если вам нужно отобразить сообщение проверки рядом с полями ввода, вам необходимо установить@Html.ValidationSummary(true) и следовать инструкциям Syneryx

5

ViewData словарь в представлении для доступаModelState данные.

Например:

В бою:

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

и получить «Ошибка 1» сообщение:

ViewData.ModelState["CustomError"].Errors[0].ErrorMessage
63


try{ } catch(){ }

И сначала проверьте, существует ли посещение для данного идентификатора и если это так, просто возвращает модель с добавленной ошибкой модели

    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

Измените свою AddModelError на

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

И на ваш взгляд просто добавьте

@Html.ValidationMessage("CustomError")

Затем, когда вы вернете свою модель, будет показана ошибка, в которой вы поместили @ Html.ValidationMessage ...

Error: User Rate Limit Exceeded

Похожие вопросы