MVC自定义验证逻辑

自定义验证逻辑有两种方法

1:将验证逻辑封装在自定义数据注解;好处是可以重用。

2:将验证逻辑封装在模型对象中;好处是易于实现。

自定义注解-验证字符串必须以某个子字符串开始

1:新建类

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace MVCMusicStore.Library
{
    public class MyStringValidationAttribute:ValidationAttribute
    {
        public MyStringValidationAttribute(string startWord)
        {
            startword = startWord;
        }
        private readonly string startword;
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value != null)
            {
                var valueString = value.ToString();
                if (!valueString.StartsWith(startword))
                {
                    return new ValidationResult("Start word wrong!");
                }
            }
            return ValidationResult.Success;
        }
    }
}

2:在需要引用该验证的Model类中添加该特性。

        [MyStringValidation("Start")]
        public virtual string Address { get; set; }

3:运行MVC项目,在需要验证的字段上输入值,这里输入的字符串开始不是“Start”就会给出错误提示。

4:稍微修改自定义的特性类代码,可以实现自定义错误提示。这里如果不给出错误信息,则以默认的base提示。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace MVCMusicStore.Library
{
    public class MyStringValidationAttribute:ValidationAttribute
    {
        public MyStringValidationAttribute(string startWord):base("{0} must start with special words")
        {
            startword = startWord;
        }
        private readonly string startword;
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value != null)
            {
                var valueString = value.ToString();
                if (!valueString.StartsWith(startword))
                {
                    var ErrorMessage = FormatErrorMessage(validationContext.DisplayName);
                    return new ValidationResult(ErrorMessage);
                }
            }
            return ValidationResult.Success;
        }
    }
}

5:修改Model中调用该特性的代码

        [MyStringValidation("Start",ErrorMessage="{0} 必须以Start开始")]
        public virtual string Address { get; set; }

封装在模型对象中-验证某个字段必须以子字符串开始

1:修改Model中要验证字段的类,该类需要实现IValidatableObject接口

    public class Order:IValidatableObject
    {
        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (LastName != null && !LastName.StartsWith("Start"))
            {
                yield return new ValidationResult("The Last Name must start with Start string");
            }
        }

2:运行该项目,字段LastName同样会验证字符串。

猜你喜欢

转载自www.cnblogs.com/yuanhaowen/p/9486743.html
今日推荐