视图中未显示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>
}

为什么我添加到模型状态的错误不会显示在我的验证摘要中?

视图中未显示ModelState错误

更改视图代码:

@Html.ValidationSummary(true)

至:

@Html.ValidationSummary(false)

根据MSDN关于ValidationSummary()的参考,以下是方法定义:

public static MvcHtmlString ValidationSummary(
    this HtmlHelper htmlHelper,
    bool excludePropertyErrors
)

请注意,如果将bool参数设置为true(就像最初所做的那样),则会排除属性错误。将其更改为false,这将得到您想要的。