ASP.NET MVC Html.ValidationSummary(true) 不显示模型错误 [英] ASP.NET MVC Html.ValidationSummary(true) does not display model errors

查看:39
本文介绍了ASP.NET MVC Html.ValidationSummary(true) 不显示模型错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 Html.ValidationSummary 有一些问题.我不想在 ValidationSummary 中显示属性错误.当我设置 Html.ValidationSummary(true) 时,它不会显示来自 ModelState 的错误消息.当字符串上的控制器动作出现异常时

MembersManager.RegisterMember(member);

catch 部分向 ModelState 添加错误:

ModelState.AddModelError("error", ex.Message);

但 ValidationSummary 不显示此错误消息.当我设置 Html.ValidationSummary(false) 时,所有消息都显示,但我不想显示属性错误.我该如何解决这个问题?

这是我正在使用的代码:

型号:

公共类成员{[必填(ErrorMessage = "*")][显示名称(登录:")]公共字符串登录{获取;放;}[必填(ErrorMessage = "*")][数据类型(数据类型.密码)][显示名称(密码:")]公共字符串密码{获取;放;}[必填(ErrorMessage = "*")][数据类型(数据类型.密码)][DisplayName("确认密码:")]公共字符串 ConfirmPassword { get;放;}}

控制器:

[HttpPost]公共 ActionResult 注册(会员){尝试{如果 (!ModelState.IsValid)返回视图();MemberManager.RegisterMember(member);}捕获(异常前){ModelState.AddModelError("error", ex.Message);返回视图(成员);}}

查看:

<% using (Html.BeginForm("Register", "Members", FormMethod.Post,new { enctype = "multipart/form-data" })) {%><p><%=Html.LabelFor(model=>model.Login)%><%=Html.TextBoxFor(model=>model.Login)%><%=Html.ValidationMessageFor(model=>model.Login)%></p><p><%=Html.LabelFor(model=>model.Password)%><%=Html.PasswordFor(model=>model.Password)%><%=Html.ValidationMessageFor(model=>model.Password)%></p><p><%=Html.LabelFor(model=>model.ConfirmPassword)%><%=Html.PasswordFor(model=>model.ConfirmPassword)%><%=Html.ValidationMessageFor(model=>model.ConfirmPassword)%></p><div><输入类型=提交"值=创建"/>

<%= Html.ValidationSummary(true)%><%}%>

解决方案

我相信 ValidationSummary 标志的工作方式是它只会显示 ModelErrors for string.empty 作为键.否则,它被认为是一个属性错误.您添加的自定义错误具有键错误",因此当您调用 ValidationSummary(true) 时它不会显示.您需要使用这样的空键添加自定义错误消息:

ModelState.AddModelError(string.Empty, ex.Message);

I have some problem with Html.ValidationSummary. I don't want to display property errors in ValidationSummary. And when I set Html.ValidationSummary(true) it does not display error messages from ModelState. When there is some Exception in controller action on string

MembersManager.RegisterMember(member);

catch section adds an error to the ModelState:

ModelState.AddModelError("error", ex.Message);

But ValidationSummary does not display this error message. When I set Html.ValidationSummary(false) all messages are displaying, but I don't want to display property errors. How can I fix this problem?

Here is the code I'm using:

Model:

public class Member
{
        [Required(ErrorMessage = "*")]
        [DisplayName("Login:")]
        public string Login { get; set; }

        [Required(ErrorMessage = "*")]
        [DataType(DataType.Password)]
        [DisplayName("Password:")]
        public string Password { get; set; }

        [Required(ErrorMessage = "*")]
        [DataType(DataType.Password)]
        [DisplayName("Confirm Password:")]
        public string ConfirmPassword { get; set; }
}

Controller:

[HttpPost]
public ActionResult Register(Member member)
{
    try
    {
        if (!ModelState.IsValid)
            return View();

        MembersManager.RegisterMember(member);
    }
    catch (Exception ex)
    {
        ModelState.AddModelError("error", ex.Message);

        return View(member);
    }
}

View:

<% using (Html.BeginForm("Register", "Members", FormMethod.Post, 
                        new { enctype = "multipart/form-data" })) {%> 
    <p>
        <%= Html.LabelFor(model => model.Login)%>
        <%= Html.TextBoxFor(model => model.Login)%>
        <%= Html.ValidationMessageFor(model => model.Login)%>
    </p>

    <p>
        <%= Html.LabelFor(model => model.Password)%>
        <%= Html.PasswordFor(model => model.Password)%>
        <%= Html.ValidationMessageFor(model => model.Password)%>
    </p>

    <p>
        <%= Html.LabelFor(model => model.ConfirmPassword)%>
        <%= Html.PasswordFor(model => model.ConfirmPassword)%>
        <%= Html.ValidationMessageFor(model => model.ConfirmPassword)%>
    </p>

    <div>
        <input type="submit" value="Create" />
    </div>

    <%= Html.ValidationSummary(true)%>
<% } %>

解决方案

I believe the way the ValidationSummary flag works is it will only display ModelErrors for string.empty as the key. Otherwise it is assumed it is a property error. The custom error you're adding has the key 'error' so it will not display in when you call ValidationSummary(true). You need to add your custom error message with an empty key like this:

ModelState.AddModelError(string.Empty, ex.Message);

这篇关于ASP.NET MVC Html.ValidationSummary(true) 不显示模型错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆