MVC驗證06-自定義錯誤資訊

Darren Ji發表於2014-03-04

本文體驗自定義錯誤資訊。

  系統預設的錯誤資訊

在"MVC驗證02-自定義驗證規則、郵件驗證"中,我們自定義了一個驗證Email的類。如果輸入郵件格式錯誤,出現系統預設的報錯資訊。

效果:
郵件驗證1             

 

  通過ErrorMessage來修改錯誤資訊

[Email(ErrorMessage = "Email格式錯誤")]
[Display(Name = "郵件")]
public string Email { get; set; }

效果:
自定義錯誤1

  在自定義驗證特性中重寫FormatErrorMessage方法

using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
using System.Web.Mvc;
 
namespace MvcValidation.Extension
{
    public sealed class EmailAttribute : ValidationAttribute, IClientValidatable
    {
        public const string reg = @"^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]+$";
 
        public EmailAttribute()
        {  
        }
 
        //重寫基類方法
        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
 
            if (value is string)
            {
                Regex regEx = new Regex(reg);
                return regEx.IsMatch(value.ToString());
            }
            return false;
        }
 
        public System.Collections.Generic.IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule rule = new ModelClientValidationRule
            {
                ValidationType = "email",
                ErrorMessage = FormatErrorMessage(metadata.GetDisplayName())
            };
            yield return rule;
        }
 
        /// <summary>
        /// 格式化錯誤資訊
        /// </summary>
        /// <param name="name">屬性名</param>
        /// <returns></returns>
        public override string FormatErrorMessage(string name)
        {
            return  this.ErrorMessage ?? string.Format("{0}屬性沒有輸入正確的Email", name);
        }
    }
}
 

效果:
自定義錯誤2

相關文章