视图中未显示ModelState错误
本文关键字:ModelState 错误 显示 视图 | 更新日期: 2023-09-27 18:23:59
我有一个操作,通过调用BLL实体的Save方法来保存记录。实体负责自己的内部验证,如果需要一个字段,但由于用户没有输入值而导致验证失败,则实体会抛出错误。我在操作中发现了这个错误,并返回了相同的视图。问题是错误没有显示在我的ValidationSummary中。
是的,我意识到我已经通过MVC的attibute进行了视图模型验证,但这个实体在其他地方使用,如果UI不能/不能进行验证,则必须进行冗余验证,例如在批处理服务作业中使用。
这是我的行动:
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);
}
这是我的看法:
@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>
}
为什么我添加到模型状态的错误不会显示在我的验证摘要中?
更改视图代码:
@Html.ValidationSummary(true)
至:
@Html.ValidationSummary(false)
根据MSDN关于ValidationSummary()的参考,以下是方法定义:
public static MvcHtmlString ValidationSummary(
this HtmlHelper htmlHelper,
bool excludePropertyErrors
)
请注意,如果将bool
参数设置为true
(就像最初所做的那样),则会排除属性错误。将其更改为false
,这将得到您想要的。