1

在我的控制器中,我有为视图创建操作。我想用 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); 

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

因为在 MVC 中,我们必须在模型中具有相同的 PropertyName,并且在字典中保存模型状态中的异常。

4

2 回答 2

1

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

于 2013-06-11T08:43:39.053 回答
-1

请检查您是否在视图中包含了 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>
于 2013-06-11T08:35:55.867 回答