ModelState.AddModelError не отображается внутри моего представления
У меня есть следующее представление, которое создает 10 ajax.beginform. Но проблема, с которой я сталкиваюсь, заключается в том, что при возникновении ошибки возникает при создании объекта, тогда ModelState.AddModelError не будет отображаться на представлении, хотя я установил @Html.ValidationSummary(true)
Вид выглядит следующим образом
@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>
И мой метод действий, который определяет ModelState.AddModelError, выглядит следующим образом: -
[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");
}
}
Итак, как я могу показать ModelState.AddModelError на моем представлении.
Ответы
Ответ 1
Я бы настоятельно рекомендовал вам изменить ваш 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...
Ответ 2
@Html.ValidationSummary(true)
показывает только сообщение об ошибке о свойствах модели, если вы хотите показать также добавленное сообщение, добавленное с помощью
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
Ответ 3
Вы можете использовать словарь ViewData
в представлении для доступа к данным ModelState
.
Например:
в действии:
ModelState.AddModelError("CustomError", "Error 1");
ModelState.AddModelError("CustomError", "Error 2");
и получить сообщение "Ошибка 1":
ViewData.ModelState["CustomError"].Errors[0].ErrorMessage