仅在电子邮件无效时显示错误消息

Posted

技术标签:

【中文标题】仅在电子邮件无效时显示错误消息【英文标题】:only show the errormessage when email is invalid 【发布时间】:2012-04-23 14:11:29 【问题描述】:

我在 ASP MVC3 中工作。我有一个输入客户联系信息的模型。 该信息是必需的。当 viewstat 无效时,文本框必须有一个红色边框(这有效)en no errormessage。但是当 emailinput 无效时,错误必须在视图上可见。因此,只有电子邮件注释的错误消息必须可见,而不是必需的注释。我不知道该怎么做。

型号:

    [Required]
    public string FirstName  get; set; 
    [Required]
    public string Name  get; set; 
    [Required]
    public string Address  get; set; 
    [Required]
    public string PostalCode  get; set; 
    [Required]
    public string City  get; set; 
    [Required]
    public string Country  get; set; 
    [Required]
    public string PhoneNumber  get; set; 
    public string Fax  get; set; 
    [Required]
    [Email]
    public string Email  get; set; 

查看:

<div class="row-fluid">
    <div class="span6">
                <div data-role="fieldcontain" class="ui-hide-label">
                    <label for=@Lingo.language.Obj_Telefoon>@Lingo.language.Obj_Telefoon</label>
                    <span>@html.TextBoxFor(m => m.PhoneNumber, new  style = "width:90%!important;", placeholder = @Lingo.language.Obj_Telefoon )</span>
                </div>               
    </div>
    <div class="span6">
        <div data-role="fieldcontain" class="ui-hide-label">
            <label for=@Lingo.language.Obj_Fax>@Lingo.language.Obj_Fax</label>
            <span>@Html.TextBoxFor(m => m.Fax, new  placeholder = @Lingo.language.Obj_Fax )</span>
        </div>  
    </div>
 </div>
 <div class="row-fluid">
    <div class="span12">
        <div data-role="fieldcontain" class="ui-hide-label">
            <label for=@Lingo.language.Obj_Email>@Lingo.language.Obj_Email</label>
            <span>@Html.TextBoxFor(m => m.Email, new  style = "width:98%!important;", placeholder = @Lingo.language.Obj_Email )</span>
            <span>@Html.ValidationMessageFor(m => m.Email)</span>
        </div>  
    </div>
 </div>

【问题讨论】:

【参考方案1】:

写下所需的信息,如下所示:

[Required( ErrorMessage = "The first name is required" )]
public string FirstName  get; set; 

【讨论】:

【参考方案2】:

如果您希望它是必需的,但不想显示“必需”错误消息,您可以将消息设置为单个空格(以避免运行时错误“ErrorMessageString 或 ErrorMessageResourceName 必须是设置,但不能同时设置。”)

[Required(ErrorMessage = " ")]
[Email(ErrorMessage = "Must be a valid email address.")]
public string Email  get; set; 

如果您还没有 Email 属性,您可以创建一个类文件(例如 EmailAttribute.cs),其中包含:

using System.ComponentModel.DataAnnotations;

public class EmailAttribute: RegularExpressionAttribute 
    public EmailAttribute()
      : base(@"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]2,4$")  
  

【讨论】:

[Required(ErrorMessage = "")] 给出一个错误,但是当你为错误放置一个空格时它会起作用。 ==> [必需(ErrorMessage = " ")] 谢谢:) 很遗憾,使用正则表达式验证电子邮件地址可能会返回错误结果。考虑这些(通过您发布的正则表达式的错误地址):double..dots..are..not..allowed@example.comme@hello.-.com,甚至是me@..com - 对于一个完整的、符合 IETF 的电子邮件验证,我建议使用我们很酷的 email validation component 作为后端对于您的 EmailAttribute 类。 ;)

以上是关于仅在电子邮件无效时显示错误消息的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 Oracle_cx 时显示“无效长度”错误消息?

BootstrapVue VeeValidate - 当表单无效时显示额外的错误消息

日期选择器仅在聚焦时显示错误

使用德语变音符号和名称中的逗号时显示错误的电子邮件接收器

无效登录/注册时创建错误消息

如何在登录失败时显示错误消息?