中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

ASP.NETMVCModel驗(yàn)證(五)-創(chuàng)新互聯(lián)

ASP.NETMVC Model驗(yàn)證(五)

10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有南川免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

前言

上篇主要講解ModelValidatorProvider和ModelValidator兩種類型的自定義實(shí)現(xiàn),然而在MVC框架中還給我們提供了其它方式來(lái)進(jìn)行Model驗(yàn)證,也就是本篇的主題,使用框架提供給我們的一系列的特性類型來(lái)進(jìn)行Model驗(yàn)證,當(dāng)然也是可以自定義的,在下面的演示示例中,我會(huì)使用我們自己自定義的特性類型(繼承自ValidationAttribute類型)到自定義Model綁定器中來(lái)模擬一下實(shí)現(xiàn)。

Model驗(yàn)證

  • Model驗(yàn)證簡(jiǎn)單運(yùn)用示例

  • ModelValidator使用生成過(guò)程

  • 自定義實(shí)現(xiàn)DefaultModelBinder進(jìn)行驗(yàn)證

  • 自定義ModelValidatorProvider 和ModelValidator

  • ValidationAttribute特性類使用

  • 自定義ValidationAttribute特性類的示例實(shí)現(xiàn)

ValidationAttribute特性類使用

我們首先看一下ValidationAttribute類型的定義,示例代碼1-1。

代碼1-1

public abstract class ValidationAttribute: Attribute
    {
        protectedValidationAttribute();
        protectedValidationAttribute(Func<string> errorMessageAccessor);
        protectedValidationAttribute(string errorMessage);
 
        // 摘要:
        //     獲取或設(shè)置一條在驗(yàn)證失敗的情況下與驗(yàn)證控件關(guān)聯(lián)的錯(cuò)誤消息。
        //
        // 返回結(jié)果:
        //     與驗(yàn)證控件關(guān)聯(lián)的錯(cuò)誤消息。
        public string ErrorMessage { get;set; }
        public string ErrorMessageResourceName { get; set; }
        public Type ErrorMessageResourceType { get; set; }
        protectedstring ErrorMessageString { get; }
        public virtual stringFormatErrorMessage(string name);
        public ValidationResult GetValidationResult(object value, ValidationContextvalidationContext);
        //
        // 摘要:
        //     確定對(duì)象的指定值是否有效。
        //
        // 參數(shù):
        //   value:
        //     要驗(yàn)證的對(duì)象的值。
        //
        // 返回結(jié)果:
        //     如果指定的值有效,則為 true;否則,為 false。
        public virtual bool IsValid(object value);
        protectedvirtual ValidationResultIsValid(object value, ValidationContextvalidationContext);
        public void Validate(objectvalue, string name);
        public void Validate(objectvalue, ValidationContext validationContext);
}

ValidationAttribute類型就是下面示例中所有應(yīng)用在Model屬性上特性類型的基類,在上面的ValidationAttribute類型中ErrorMessage屬性表示驗(yàn)證錯(cuò)誤所顯示信息,IsValid()方法則是表示驗(yàn)證的值是否通過(guò),下面我們看一下框架給我們提供的Model驗(yàn)證特性類的簡(jiǎn)單示例。

首先我們還是使用ASP.NETMVC Model驗(yàn)證(一)中的示例代碼,看一下ViewModel使用了驗(yàn)證特性類后的定義,示例代碼1-2.

代碼1-2

namespace MvcApplication.Models
{
    ///<summary>
    /// ViewModel-用戶注冊(cè)信息
    ///</summary>
    public class RegistrationInformation
    {
        [Required]
        public string ID { get; set; }
        [Required]
        public string UserID { get; set; }
        [Required]
        [StringLength(10)]
        public string Password1 { get;set; }
        [Compare("Password1")]
        public string Password2 { get;set; }
        
        public string Name { get; set; }
    }
}

在代碼1-2中,我們看到了一些應(yīng)用于Model屬性上的特性類,下面簡(jiǎn)單的說(shuō)一下這幾種類型的含義。

Required:[Required],表示此屬性不得為空(包括空字符串),當(dāng)然了也可以通過(guò)設(shè)置內(nèi)部的AllowEmptyStrings屬性為true后,則視為可以為空。

StringLength:[StringLength(10)],表示此屬性值的字符串大長(zhǎng)度不能超過(guò)10。

Compare:[Compare(“Password1”)],表示此屬性的值必須和指定屬性的值相同,示例中就是Password2的值必須和Password1屬性的值相同,不然就會(huì)提示驗(yàn)證的錯(cuò)誤信息

下面來(lái)一下項(xiàng)目運(yùn)行后的結(jié)果圖,

圖1

ASP.NETMVC Model驗(yàn)證(五)

圖1中故意輸入的這些數(shù)值,看下圖2是驗(yàn)證后的結(jié)果

圖2

ASP.NETMVC Model驗(yàn)證(五)

自定義ValidationAttribute特性類的示例實(shí)現(xiàn)

這一小節(jié)我們直接來(lái)看自定義Model驗(yàn)證特性類型,直接來(lái)看定義的示例代碼1-3.

代碼1-3

namespace MvcApplication.ModelValidators
{
    [AttributeUsage(AttributeTargets.Property,AllowMultiple=true,Inherited=false)]
    public class CustomModelValidatorAttribute:ValidationAttribute
    {
 
        public override boolIsValid(object value)
        {
            if(string.IsNullOrEmpty((string)value)|| string.Compare((string)value,"jinyuan", true) == 0)
            {
                ErrorMessage = "不能為空,或名稱不合法!";
                returnfalse;
            }
            else
            {
                returntrue;
            }
        }
    }
}

這里為什么要重寫(xiě)基類的IsValid()方法,可能MVC框架會(huì)調(diào)用這個(gè)方法來(lái)判斷當(dāng)前值是否通過(guò)驗(yàn)證,這里說(shuō)一句題外話,在MVC框架中我翻看過(guò)默認(rèn)綁定器類型的實(shí)現(xiàn)代碼,并沒(méi)有找到對(duì)Model驗(yàn)證特性類的調(diào)用,哪位大神知道的話告知一下小弟感激不盡。

現(xiàn)在我們?cè)傩薷囊幌麓a1-2中的定義,示例代碼1-4.

代碼1-4

        [CustomModelValidator]
        public string Name { get; set; }

修改過(guò)后我們看一下結(jié)果圖3和圖4.

圖3

ASP.NETMVC Model驗(yàn)證(五)

圖4

ASP.NETMVC Model驗(yàn)證(五)

看到這里,有點(diǎn)不死心,想模擬實(shí)現(xiàn)一下默認(rèn)綁定器的內(nèi)部實(shí)現(xiàn),這部分內(nèi)容僅供參考,示例代碼1-5.

代碼1-5

    public class CustomModelValidatorAttributeModelBinder: DefaultModelBinder
    {
        protectedoverride voidSetProperty(ControllerContextcontrollerContext, ModelBindingContextbindingContext, PropertyDescriptorpropertyDescriptor, object value)
        {
            base.SetProperty(controllerContext,bindingContext, propertyDescriptor, value);
            foreach(Attribute att inpropertyDescriptor.Attributes)
            {
                if(att is ModelValidators.CustomModelValidatorAttribute)
                {
                    ModelValidators.CustomModelValidatorAttribute mva = att as ModelValidators.CustomModelValidatorAttribute;
                    if(!mva.IsValid(value))
                    {
                       bindingContext.ModelState.AddModelError(propertyDescriptor.Name,mva.ErrorMessage);
                    }
                }
            }
        }
    }

在代碼1-5中我們根據(jù)PropertyDescriptor類型的參數(shù)獲取到應(yīng)用在Model屬性上的所有特性類,然后篩選到我們自定義的類型,進(jìn)行一個(gè)驗(yàn)證判斷然后將其錯(cuò)誤信息添加到ModelState中,需要把我們自定義的這個(gè)Model綁定器注冊(cè)到系統(tǒng)中,運(yùn)行的時(shí)候按照?qǐng)D3的輸入,結(jié)果就跟圖4一樣。同樣的都能實(shí)現(xiàn)功能,這里只是讓大家對(duì)默認(rèn)的綁定器營(yíng)造個(gè)遐想的空間。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文標(biāo)題:ASP.NETMVCModel驗(yàn)證(五)-創(chuàng)新互聯(lián)
本文路徑:http://www.rwnh.cn/article30/dgseso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)外貿(mào)建站、響應(yīng)式網(wǎng)站、小程序開(kāi)發(fā)網(wǎng)站改版、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
松潘县| 思茅市| 太仓市| 南召县| 上饶县| 固始县| 眉山市| 岳池县| 新疆| 舞阳县| 班玛县| 渭源县| 安新县| 镇安县| 奉化市| 平利县| 西丰县| 长丰县| 镇远县| 平顺县| 丰原市| 浠水县| 晋江市| 开封县| 海南省| 白玉县| 波密县| 岳池县| 厦门市| 东阳市| 肇源县| 平塘县| 武川县| 绥宁县| 达孜县| 台北市| 宿州市| 彝良县| 凤山市| 高密市| 资讯|