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同样会验证字符串。

转载于:https://www.cnblogs.com/yuanhaowen/p/9486743.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值