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

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

问题描述

我有一些问题,Html.ValidationSummary。我不想的ValidationSummary显示属性的错误。而当我设Html.ValidationSummary(真)不显示从ModelState中的错误信息。当有一些异常的控制器行动字符串

  MembersManager.RegisterMember(会员);

捕节将错误的ModelState中:

  ModelState.AddModelError(错误,ex.Message);

不过的ValidationSummary不显示此错误消息。当我设置Html.ValidationSummary(假)的所有消息都显示,但我不希望显示属性的错误。我怎样才能解决这个问题?

下面是code我使用的是:

型号:

 公共类会员
{
        [必需(的ErrorMessage =*)]
        [显示名称(登录)]
        公共字符串登录{搞定;组; }        [必需(的ErrorMessage =*)]
        [数据类型(DataType.Password)
        [显示名称(密码)]
        公共字符串密码{搞定;组; }        [必需(的ErrorMessage =*)]
        [数据类型(DataType.Password)
        [显示名称(确认密码)]
        公共字符串ConfirmPassword {搞定;组; }
}

控制器:

  [HttpPost]
公众的ActionResult注册(注​​册会员)
{
    尝试
    {
        如果(!ModelState.IsValid)
            返回查看();        MembersManager.RegisterMember(会员);
    }
    赶上(异常前)
    {
        ModelState.AddModelError(错误,ex.Message);        返回查看(会员);
    }
}

查看:

 <使用(Html.BeginForm(注册,成员%FormMethod.Post,
                        新{ENCTYPE =的multipart / form-data的})){%GT;
    &所述p为H.;
        <%= Html.LabelFor(型号=> model.Login)%GT;
        <%= Html.TextBoxFor(型号=> model.Login)%GT;
        <%= Html.ValidationMessageFor(型号=> model.Login)%GT;
    &所述; / P>    &所述p为H.;
        <%= Html.LabelFor(型号=> model.Password)%GT;
        <%= Html.PasswordFor(型号=> model.Password)%GT;
        <%= Html.ValidationMessageFor(型号=> model.Password)%GT;
    &所述; / P>    &所述p为H.;
        <%= Html.LabelFor(型号=> model.ConfirmPassword)%GT;
        <%= Html.PasswordFor(型号=> model.ConfirmPassword)%GT;
        <%= Html.ValidationMessageFor(型号=> model.ConfirmPassword)%GT;
    &所述; / P>    < D​​IV>
        <输入类型=提交值=创建/>
    < / DIV>    <%= Html.ValidationSummary(真)%GT;
<%}%GT;


解决方案

我相信在ValidationSummary标志的工作方式是将只显示为ModelErrors 的String.Empty 作为键。否则,假设它是一个属性错误。没有验证您提供的字符串/未在模型的属性。

  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. There is no validation that the string you provide is/isn't a property on the Model.

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

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

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