成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

ASP.NETMVCModel元數(shù)據(jù)(五)-創(chuàng)新互聯(lián)

ASP.NET MVC Model元數(shù)據(jù)(五)

前言

在上一篇中我們描述了應(yīng)用于Model上面的各種用于顯示控制的特性類,在本篇中將詳細(xì)的介紹這些特性類的應(yīng)用,雖然它們跟Model元數(shù)據(jù)的直接關(guān)系并不大,但是我們可以用它們?cè)诰幋a階段控制運(yùn)行時(shí)的顯示。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、平江網(wǎng)站維護(hù)、網(wǎng)站推廣。

Model元數(shù)據(jù)

  • 什么是Model元數(shù)據(jù)?

  • 生成Model元數(shù)據(jù)的過程【一】

  • 生成Model元數(shù)據(jù)的過程【二】

  • ModelMetaData的定義、詳解

  • Model元數(shù)據(jù)應(yīng)用(常用特性應(yīng)用)-1

  • Model元數(shù)據(jù)應(yīng)用(自定義視圖模板)-2

  • Model元數(shù)據(jù)應(yīng)用(IMetadataAware接口使用)-3

Model元數(shù)據(jù)應(yīng)用(常用特性應(yīng)用)-1

所用示例:

代碼1-1

    public class Customer
    {
        public string CustomerID { get; set; }
        public string Name { get; set; }
        public DateTime RegistrationDate{ get; set; }
        public Address Address { get; set; } 
    }
    public class Address
    {
        public string AddressName { get; set; }
    }

這是下面所要用的示例Model,下面的代碼1-2示例是使用自定義模型綁定器用于獲取Model數(shù)據(jù)的,大家只需要看數(shù)據(jù)的值就行了,對(duì)于Model綁定部分后續(xù)的篇幅的中再介紹。

代碼1-2

        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            return new Customer()
            {
                CustomerID = "010",
                Name = "測(cè)試人員",
                RegistrationDate = DateTime.Now,
                Address = new Address()
                {
                    AddressName = "天空之城"
                }
            };
        }

HiddenInputAttribute

HiddenInputAttribute類型所表示的意思是將應(yīng)用的屬性顯示為隱藏輸入域類型(Hidden),其中包含一個(gè)屬性DisplayValue表示是否顯示這個(gè)隱藏的輸入域,我們修改一下代碼1-1中的內(nèi)容:

代碼1-3

[HiddenInput(DisplayValue=true)]
public string CustomerID { get; set; }

然后看一下我們?cè)谝晥D界面的代碼:

代碼1-4

@model ConsoleApplication2.Customer
@{
    ViewBag.Title = "Show";
}
<h3>Show</h3>
<p>@Html.EditorForModel()</p>

結(jié)果如圖1.

圖1

ASP.NET MVC Model元數(shù)據(jù)(五)

在圖1中我們看到CustomerID對(duì)應(yīng)的屬性值&ldquo;010&rdquo;在頁面里顯示為只讀的文本狀態(tài),生成的Html代碼如下:

<input name="CustomerID" id="CustomerID" type="hidden" value="010"/>

修改代碼1-3中的DisplayValue屬性值為true后,視圖部分的代碼不變,運(yùn)行結(jié)果如圖2。

圖2

ASP.NET MVC Model元數(shù)據(jù)(五)

在圖2中,已經(jīng)看不到CustomerID屬性所表示的項(xiàng)了,看到這里相信我們已經(jīng)了解了HiddenInputAttribute類型的使用了吧。

DataTypeAttribute

看上面的圖2 ,RegistrationDate屬性所對(duì)應(yīng)的值都是日期時(shí)間格式的,那怎么控制屬性值的輸入樣式呢?比如說想讓屬性值顯示為日期類型,來看代碼1-5

代碼1-5

[DataType(DataType.Date)]
public DateTime RegistrationDate{ get; set; }

視圖部分的代碼不用改變來看一下結(jié)果圖3

圖3

ASP.NET MVC Model元數(shù)據(jù)(五)

從上圖中看出輸出值的格式樣式已經(jīng)改變了。

DisplayAttribute

DisplayAttribute類型用于指示的屬性所顯示的標(biāo)簽值的修改,比如說圖3中的Name和RegistrationDate,想顯示我們成我們自定義的名稱就要用DisplayAttribute類型,來看代碼1-6.

代碼1-6

[Display(Name="姓名")]
public string Name { get; set; }
[DataType(DataType.Date)]
[Display(Name="注冊(cè)日期")]
public DateTime RegistrationDate{ get; set; }

視圖部分的代碼依舊不變,我們來看一下運(yùn)行的結(jié)果圖4。

圖4

ASP.NET MVC Model元數(shù)據(jù)(五)

從圖4我們已經(jīng)看到更改了

Model元數(shù)據(jù)應(yīng)用(自定義視圖模板)-2

UIHintAttribute

本小節(jié)對(duì)視圖模板和UIHintAttribute類型的使用做一些簡(jiǎn)單的介紹。

視圖模板是什么意思呢?就是根據(jù)Model元數(shù)據(jù)提供的信息生成為指定的視圖模板所對(duì)應(yīng)的Html代碼(包含Html元素樣式),我們看一下示例,這樣比較直觀。

代碼2-1

    public class Customer
    {
        [HiddenInput(DisplayValue=false)]
        public string CustomerID { get; set; }

        [Display(Name="姓名")]
        [UIHint("Password")]
        public string Name { get; set; }

        [DataType(DataType.Date)]
        [Display(Name="注冊(cè)日期")]
        public DateTime RegistrationDate{ get; set; }

        public Address Address { get; set; } 
    }

從代碼2-1中的Name屬性上看到UIHintAttribute類型的特性,使用它的意思就是指定一個(gè)視圖模板來為這個(gè)屬性生成Html代碼,這樣為了直觀的可以看出來所以使用了Password視圖模板,這個(gè)Password視圖模板的意思講Model元數(shù)據(jù)所對(duì)應(yīng)的屬性值生成為一個(gè)單行的文本框Input元素,并且元素中的字符是不可見的,是可編輯的。看一下結(jié)果圖5.

圖5

ASP.NET MVC Model元數(shù)據(jù)(五)

所對(duì)應(yīng)的Html代碼2-2

代碼2-2

<input name="Name" class="text-box single-line password" id="Name" type="password" value="測(cè)試人員"/>

系統(tǒng)為我們提供了許多視圖模板,但是也不能亂用的,要保持使用的視圖模板所需類型和指定的屬性一致的。

自定義視圖模板

細(xì)心的朋友可能會(huì)發(fā)現(xiàn)在上面的顯示頁面中都沒有發(fā)現(xiàn)Address屬性的值,這個(gè)在前篇就強(qiáng)調(diào)過,因?yàn)锳ddress屬性對(duì)應(yīng)的類型在生成Model元數(shù)據(jù)的時(shí)候被判別為復(fù)雜類型,而模板視圖輔助器是不會(huì)去對(duì)復(fù)雜類型進(jìn)行處理的,那我們要怎么顯示Address屬性中的值呢?

我們使用自定義的視圖模板,當(dāng)然作用不止這么一點(diǎn),只是用來講解而已。

首先項(xiàng)目中的/Views/Shared的目錄下新建一個(gè)名為EditorTemplates的文件夾,然后在此文件夾中新建一個(gè)強(qiáng)類型的分布視圖文件,類型是指定屬性對(duì)應(yīng)的類型,并且命名視圖文件為指定屬性的類型名稱,按照示例來說就是Address類型的名稱就是Address,完成后應(yīng)該是這樣的,圖6

圖6

ASP.NET MVC Model元數(shù)據(jù)(五)

在此視圖中添加如代碼2-3。

代碼2-3

<p>
@Html.LabelFor(m=>m.AddressName)
@Html.EditorFor(m => m.AddressName)
</p>

然后修改代碼2-1中的Address屬性,并且修改Address類型里的AddressName屬性要顯示的名稱,用我們上面講過的DisplayAttribute類型示例代碼2-4

代碼2-4

    public class Customer
    {
        [HiddenInput(DisplayValue=false)]
        public string CustomerID { get; set; }

        [Display(Name="姓名")]
        [UIHint("Password")]
        public string Name { get; set; }

        [DataType(DataType.Date)]
        [Display(Name="注冊(cè)日期")]
        public DateTime RegistrationDate{ get; set; }

        [UIHint("Address")]
        public Address Address { get; set; } 
    }
    public class Address
    {
        [Display(Name="地址名稱")]
        public string AddressName { get; set; }
    }

然后再修改掉我們主視圖頁面的代碼,使用EditFor輔助器單獨(dú)的對(duì)Address屬性進(jìn)行處理操作,如代碼2-5所示。

代碼2-5

@model ConsoleApplication2.Customer
@{
    ViewBag.Title = "Show";
}
<h3>Show</h3>
<p>@Html.EditorForModel()</p>
<p>@Html.EditorFor(m=>Model.Address)</p>

然后我們看一下修改后的結(jié)果圖7.

圖7

ASP.NET MVC Model元數(shù)據(jù)(五)

還有一些其他的特性類型的使用示例會(huì)在以后修改本篇,現(xiàn)在本人也不是太熟不能亂寫的。

Model元數(shù)據(jù)應(yīng)用(IMetadataAware接口使用)-3

前面的篇幅對(duì)Model元數(shù)據(jù)的生成的詳細(xì)過程以及使用都有所粗略的講解,想必這時(shí)大家已經(jīng)對(duì)Model元數(shù)據(jù)有所了解了,這個(gè)小節(jié)介紹如何使用IMetadataAware接口類型來實(shí)現(xiàn)我們直接操作Model元數(shù)據(jù),從而跳過那些使用系統(tǒng)自帶的那些特性類,它們是可以先設(shè)置,但是我們也可以自定義的設(shè)置Model元數(shù)據(jù)的值,好了廢話不多說了往下看吧。

在Model元數(shù)據(jù)(二)的篇幅里,我們提到過的內(nèi)容中,在Model元數(shù)據(jù)生成后的最后一步過程是會(huì)調(diào)用Model元數(shù)據(jù)生成提供程序中的一個(gè)函數(shù),在此函數(shù)中MVC框架會(huì)檢索當(dāng)前Model元數(shù)據(jù)所指定的類型上的所有特性類型集合,檢索出實(shí)現(xiàn)了IMetadataAware接口的特性類,然后使用這個(gè)實(shí)現(xiàn)類型對(duì)當(dāng)前Model元數(shù)據(jù)進(jìn)行操作??赡芘笥褌兛次业倪@段敘述有點(diǎn)模糊,那我們直接來看示例代碼吧。

首先我們定義個(gè)類型來實(shí)現(xiàn)IMetadataAware接口類型,而根據(jù)MVC框架檢索的前提約定,我們需要把自定義的類型定義為特性類,如代碼3-1所示:

代碼3-1

[AttributeUsage(AttributeTargets.Class|AttributeTargets.Property,AllowMultiple=false,Inherited=false)]
    public class MyCustomMetadataAware:Attribute,IMetadataAware
    {
        public void OnMetadataCreated(ModelMetadata metadata)
        {
            if (metadata != null)
            {
                if (metadata.DisplayName == "地址名稱")
                {
                    metadata.DisplayName = "經(jīng)過IMetadataAware修改的地址名稱";
                }
            }
        }
    }

在代碼3-1中,我們自定義的類型MyCustomMetadataAware實(shí)現(xiàn)了IMetadataAware接口類型,并且在OnMetadataCreated()方法中對(duì)metadata參數(shù)(Model元數(shù)據(jù))進(jìn)行修改,修改的屬性DisplayName是Model元數(shù)據(jù)控制器對(duì)應(yīng)屬性顯示的名稱,在這個(gè)MyCustomMetadataAware類型中我們把這個(gè)DisplayName屬性值如果符合某種條件下修改掉(為了配合上面的示例)。

我們?cè)賮砜匆幌挛覀兊腗odel定義,如代碼3-2:

代碼3-2

public class Customer
    {
        [HiddenInput(DisplayValue=false)]
        public string CustomerID { get; set; }

        [Display(Name="姓名")]
        [UIHint("Password")]
        public string Name { get; set; }

        [DataType(DataType.Date)]
        [Display(Name="注冊(cè)日期")]
        public DateTime RegistrationDate{ get; set; }

        [UIHint("Address")]
        public Address Address { get; set; } 
    }
    public class Address
    {
        [Display(Name="地址名稱")]
        [MyCustomMetadataAware]
        public string AddressName { get; set; }
    }

在代碼3-2中,我們把Model中的Address屬性所對(duì)應(yīng)的Address類型中的AddressName屬性加上了我們自定義的特性類,意在修改這個(gè)屬性最后在頁面上顯示出來的值。

我們看一下修改后的結(jié)果圖8.

圖8

ASP.NET MVC Model元數(shù)據(jù)(五)

從圖8中我們可以清楚的看到對(duì)應(yīng)地址欄的標(biāo)簽名稱已經(jīng)被修改掉了,對(duì)于系統(tǒng)提供的這個(gè)IMetadataAware接口我們可以做更多的自定義操作,這種方式的編程模式我們也是很常見的。

Model元數(shù)據(jù)部分到這里就全部結(jié)束了,其中也會(huì)有很多細(xì)節(jié)的部分沒有講的很到位、沒有很全面,因?yàn)椴┲魇切“子惺裁磳懙牟缓玫牡胤脚笥褌兛梢蕴岢鰜?,我?huì)學(xué)習(xí)并且再來回的修改篇幅,能在這里為大家盡一點(diǎn)薄力感到很榮幸,也謝謝大家的支持。下一個(gè)系列將是Model綁定的部分,大家敬請(qǐng)期待。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。

網(wǎng)站標(biāo)題:ASP.NETMVCModel元數(shù)據(jù)(五)-創(chuàng)新互聯(lián)
本文URL:http://jinyejixie.com/article2/ddejoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站云服務(wù)器、網(wǎng)頁設(shè)計(jì)公司、建站公司、軟件開發(fā)、服務(wù)器托管

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
宁武县| 新丰县| 莱州市| 和静县| 常山县| 自治县| 察隅县| 闽侯县| 平江县| 墨竹工卡县| 五大连池市| 襄樊市| 华蓥市| 江达县| 巴彦县| 康平县| 岳普湖县| 梨树县| 托克托县| 塔河县| 镇坪县| 万盛区| 昌吉市| 望奎县| 吉安市| 郁南县| 泰宁县| 荔波县| 耿马| 遵义县| 怀远县| 宜宾县| 青海省| 临朐县| 南澳县| 崇文区| 洞口县| 宝丰县| 和平区| 石渠县| 志丹县|