久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

ASP.NETMVCModel元數據(五)-創新互聯

ASP.NET MVC Model元數據(五)

前言

在上一篇中我們描述了應用于Model上面的各種用于顯示控制的特性類,在本篇中將詳細的介紹這些特性類的應用,雖然它們跟Model元數據的直接關系并不大,但是我們可以用它們在編碼階段控制運行時的顯示。

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

Model元數據

  • 什么是Model元數據?

  • 生成Model元數據的過程【一】

  • 生成Model元數據的過程【二】

  • ModelMetaData的定義、詳解

  • Model元數據應用(常用特性應用)-1

  • Model元數據應用(自定義視圖模板)-2

  • Model元數據應用(IMetadataAware接口使用)-3

Model元數據應用(常用特性應用)-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數據的,大家只需要看數據的值就行了,對于Model綁定部分后續的篇幅的中再介紹。

代碼1-2

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

HiddenInputAttribute

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

代碼1-3

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

然后看一下我們在視圖界面的代碼:

代碼1-4

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

結果如圖1.

圖1

ASP.NET MVC Model元數據(五)

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

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

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

圖2

ASP.NET MVC Model元數據(五)

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

DataTypeAttribute

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

代碼1-5

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

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

圖3

ASP.NET MVC Model元數據(五)

從上圖中看出輸出值的格式樣式已經改變了。

DisplayAttribute

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

代碼1-6

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

視圖部分的代碼依舊不變,我們來看一下運行的結果圖4。

圖4

ASP.NET MVC Model元數據(五)

從圖4我們已經看到更改了

Model元數據應用(自定義視圖模板)-2

UIHintAttribute

本小節對視圖模板和UIHintAttribute類型的使用做一些簡單的介紹。

視圖模板是什么意思呢?就是根據Model元數據提供的信息生成為指定的視圖模板所對應的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="注冊日期")]
        public DateTime RegistrationDate{ get; set; }

        public Address Address { get; set; } 
    }

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

圖5

ASP.NET MVC Model元數據(五)

所對應的Html代碼2-2

代碼2-2

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

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

自定義視圖模板

細心的朋友可能會發現在上面的顯示頁面中都沒有發現Address屬性的值,這個在前篇就強調過,因為Address屬性對應的類型在生成Model元數據的時候被判別為復雜類型,而模板視圖輔助器是不會去對復雜類型進行處理的,那我們要怎么顯示Address屬性中的值呢?

我們使用自定義的視圖模板,當然作用不止這么一點,只是用來講解而已。

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

圖6

ASP.NET MVC Model元數據(五)

在此視圖中添加如代碼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="注冊日期")]
        public DateTime RegistrationDate{ get; set; }

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

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

代碼2-5

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

然后我們看一下修改后的結果圖7.

圖7

ASP.NET MVC Model元數據(五)

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

Model元數據應用(IMetadataAware接口使用)-3

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

在Model元數據(二)的篇幅里,我們提到過的內容中,在Model元數據生成后的最后一步過程是會調用Model元數據生成提供程序中的一個函數,在此函數中MVC框架會檢索當前Model元數據所指定的類型上的所有特性類型集合,檢索出實現了IMetadataAware接口的特性類,然后使用這個實現類型對當前Model元數據進行操作。可能朋友們看我的這段敘述有點模糊,那我們直接來看示例代碼吧。

首先我們定義個類型來實現IMetadataAware接口類型,而根據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 = "經過IMetadataAware修改的地址名稱";
                }
            }
        }
    }

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

我們再來看一下我們的Model定義,如代碼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="注冊日期")]
        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屬性所對應的Address類型中的AddressName屬性加上了我們自定義的特性類,意在修改這個屬性最后在頁面上顯示出來的值。

我們看一下修改后的結果圖8.

圖8

ASP.NET MVC Model元數據(五)

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

Model元數據部分到這里就全部結束了,其中也會有很多細節的部分沒有講的很到位、沒有很全面,因為博主是小白有什么寫的不好的地方朋友們可以提出來,我會學習并且再來回的修改篇幅,能在這里為大家盡一點薄力感到很榮幸,也謝謝大家的支持。下一個系列將是Model綁定的部分,大家敬請期待。

創新互聯www.cdcxhl.cn,專業提供香港、美國云服務器,動態BGP最優骨干路由自動選擇,持續穩定高效的網絡助力業務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節活動現已開啟,新人活動云服務器買多久送多久。

網站標題:ASP.NETMVCModel元數據(五)-創新互聯
本文URL:http://www.js-pz168.com/article2/ddejoc.html

成都網站建設公司_創新互聯,為您提供自適應網站云服務器網頁設計公司建站公司軟件開發服務器托管

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
亚洲区一区二区三区| 欧美区视频在线观看| 欧美日韩一区三区四区| 精品国产乱码久久| 亚洲欧美日韩精品久久久久| 天天影视涩香欲综合网| 风间由美一区二区三区在线观看 | 国产成人精品一区二区三区福利| 欧美日韩一区二区三区在线视频| 亚洲三区视频| 精品国产99国产精品| 亚洲一区二区精品视频| 国产精品99久久久| 精品国产乱码久久久久久蜜柚| 最新亚洲人成网站在线| 精品国产一区二区三区av性色| 一区二区三区四区精品在线视频| 国产精品自拍毛片| 精品午夜一区二区三区| 欧美日韩一本到| 亚洲国产电影在线观看| 青青草国产成人av片免费| 99精品视频在线播放观看| 亚洲精品免费在线看| 久久综合九色综合97婷婷女人| 亚洲一区二区三区视频在线 | 精品视频资源站| 国产精品久久久久久久久晋中| 麻豆91免费观看| 国产精品日韩一区二区| 欧美色图第一页| 国产精品久久久久国产精品日日| 老司机免费视频一区二区三区| 成人免费在线看片| 欧洲一区在线电影| 国产精品久久久久一区| 国产精品自拍网站| 亚洲精品在线观看免费| 久久久美女艺术照精彩视频福利播放| 午夜精品久久久久久久久久久| 99在线视频免费观看| 欧美日韩在线综合| 亚洲女同一区二区| 成人h动漫精品一区二| 一区二区日本伦理| 国产精品天美传媒沈樵| 国产很黄免费观看久久| 亚洲五月六月| 国产精品高潮呻吟| 风间由美中文字幕在线看视频国产欧美| 亚洲电影免费| 中文字幕成人av| 国产电影一区二区三区| 一区二区三区四区欧美| 国产精品国产自产拍高清av| 国产+成+人+亚洲欧洲自线| 亚洲日本精品国产第一区| 国产精品免费aⅴ片在线观看| 国产激情精品久久久第一区二区 | 久久久久久久一区| 精品一区精品二区高清| 日韩伦理一区二区三区av在线| 2019国产精品| 国产精品亚洲专一区二区三区 | 欧美一区二区三区免费大片| 日韩激情视频网站| 久久偷看各类wc女厕嘘嘘偷窃| 337p粉嫩大胆色噜噜噜噜亚洲 | 欧美视频一区在线| 亚洲一级不卡视频| 国产精品一国产精品最新章节| 欧美一区二区福利视频| 青娱乐精品在线视频| 日本成人看片网址| 国产精品久久久久久久久晋中| 99久久99久久综合| 3atv在线一区二区三区| 日产精品久久久久久久性色| 日本一区二区不卡高清更新| 国产精品久久久久久久久久免费看 | 欧美激情一二三区| 成人av网址在线观看| 欧美日韩午夜在线| 青草av.久久免费一区| 日韩欧美精品一区二区| 亚洲欧美另类在线| 国产精选在线观看91| 久久久国产精品麻豆| 成人h动漫精品| 日韩一区二区三区在线| 久久99国产精品免费网站| 色综合久久天天| 午夜a成v人精品| 天堂精品视频| |精品福利一区二区三区| 国产精品18毛片一区二区| 久久久久国产免费免费| 国产aⅴ综合色| 56国语精品自产拍在线观看| 九九视频精品免费| 欧美亚洲精品一区| 免费久久99精品国产| 伊人久久大香线蕉综合75| 午夜一区二区三区视频| 亚洲精品无人区| 亚洲午夜在线电影| 日韩三级电影免费观看| 亚洲一区二区欧美日韩| 水蜜桃亚洲精品| 亚洲18色成人| 制服国产精品| 男女男精品视频| 欧美性生活久久| 国产综合久久久久久久久久久久| 欧美午夜一区二区三区免费大片| 看片的网站亚洲| 欧美久久久久中文字幕| 国产成人av自拍| 精品粉嫩超白一线天av| av网站免费线看精品| 久久久精品日韩欧美| 99三级在线| 成人免费在线观看入口| 欧美aaaaa喷水| 亚洲一级在线观看| 日本丰满少妇一区二区三区| 久久97超碰色| 欧美一区二区国产| 972aa.com艺术欧美| 国产精品入口麻豆九色| 免费av一区二区三区| 亚洲国产日韩一级| 在线视频欧美精品| 精品综合免费视频观看| 日韩一区二区三区视频| 91色|porny| 日韩一区日韩二区| 五月天亚洲综合情| 免费成人结看片| 日韩一区二区三免费高清| 91在线看国产| 成人免费在线播放视频| 亚洲成人第一| 国产一区欧美二区| 欧美精品一区在线观看| 国产私拍一区| 亚洲国产精品久久久男人的天堂| 在线视频中文字幕一区二区| 国产成人高清视频| 国产精品久久久久久久久免费相片| 欧美主播一区二区三区美女 久久精品人 | 一区二区三区四区精品在线视频| 一区二区视频在线播放| 国产一区二区三区精品欧美日韩一区二区三区| 欧美一级夜夜爽| 国产不卡一区二区在线观看| 一二三四社区欧美黄| 欧美艳星brazzers| 91免费在线看| 亚洲精品中文在线| 色噜噜久久综合| 成人精品高清在线| 亚洲特级片在线| 色悠悠亚洲一区二区| 国产成人精品一区二区三区四区| 欧美极品另类videosde| 亚洲成人蜜桃| 国产91精品欧美| 亚洲免费av在线| 欧美午夜电影一区| 中文字幕乱码日本亚洲一区二区| 日韩欧美在线一区二区| 国产精品1区2区| 中文字幕一区二区日韩精品绯色| 91国偷自产一区二区使用方法| 不卡的av在线| 亚洲国产精品精华液网站| 欧美人与z0zoxxxx视频| 成人综合色站| 三级不卡在线观看| 精品国产精品一区二区夜夜嗨| 日本黑人久久| 福利一区二区在线| 一区二区三区高清不卡| 91精品国产综合久久国产大片| 好看的日韩精品| 激情综合网av| 亚洲欧洲韩国日本视频| 欧美精品日韩精品| 蜜桃av噜噜一区二区三| 国产又粗又猛又爽又黄91精品| 国产精品毛片久久久久久| 欧美亚州韩日在线看免费版国语版| 91av免费看| 免费成人美女在线观看.| 久久精品人人做人人爽97| 色婷婷一区二区| 国产高清一区二区三区| 麻豆精品视频在线观看| 国产精品久久久久久久久搜平片|