MVC中的ModelState不显示错误

时间:2013-06-11 08:27:01

标签: asp.net-mvc razor modelstate

在我的控制器中我有创建视图的动作。我想用ModelState显示验证异常。但它不能真正起作用。

    /// <summary>
    /// GET: /AgentPosition/Create
    /// </summary>
    /// <param name="model">The model.</param>
    /// <returns></returns>
    public override ActionResult Create(Models.AgentPosition.AgentPositionModel model)
    {
        if (model.PositionContacts == null || model.BankAccountDetails == null)
        {
            if (model.PositionContacts == null)
            {
                this.ModelState.AddModelError("PositionContacts",Resources.Resource.MustInputPositionContact);
            }

            if (model.BankAccountDetails == null)
            {
                this.ModelState.AddModelError("BankAccounts", Resources.Resource.MustInputBankAccountDetail);
            }

            return this.View(model);
        }

        return base.Create(model);
    }
在我的视图中

 @using (this.Html.BeginForm("Create", "AgentPosition", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    this.Html.ValidationSummary(true);
     <div>
            @this.Html.Partial("BankAccounts", this.Model)
            @this.Html.ValidationMessageFor(model => model.BankAccountDetails)
        </div>

        <div>
            @this.Html.Partial("PositionContacts", this.Model)
            @this.Html.ValidationMessageFor(model => model.PositionContacts)
        </div>

}

我在View中只给出了一个来自ModelState的异常验证(第一个模型错误)。

我找到了答案。 我必须更改此代码:

this.ModelState.AddModelError("BankAccounts", Resources.Resource.MustInputBankAccountDetail); 

TO

this.ModelState.AddModelError("BankAccountDetails", Resources.Resource.MustInputBankAccountDetail) 

因为在MVC中我们必须在Model中具有相同的PropertyName,并且它在字典中保存在modelstate中的异常。

2 个答案:

答案 0 :(得分:1)

您可以尝试将false而不是true传递给ValidationSummary调用。此参数为excludePropertyErrors,这意味着如果将其设置为true,则摘要不会显示相对于PositionContacts和BankAccounts属性的错误。

答案 1 :(得分:0)

请检查您是否在视图中包含了Jquery模型验证文件,如下所示:

<script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'></script>
<script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script>