中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

愛(ai)上MVC~為Html.EditorForModel自定義模版

回到目錄

挺(ting)有意思的一件事

對于MVC視圖渲(xuan)染(ran)(ran)來說(shuo),大家應該不(bu)(bu)(bu)會(hui)陌生(sheng),但對于模型的(de)(de)渲(xuan)染(ran)(ran),不(bu)(bu)(bu)知(zhi)道是(shi)(shi)(shi)否(fou)聽說(shuo)過,主要(yao)是(shi)(shi)(shi)說(shuo)Model通過它屬性(xing)(xing)的(de)(de)相關特性(xing)(xing)(DataType,UIHint)來將它們自動(dong)渲(xuan)染(ran)(ran)到View上(shang),這是(shi)(shi)(shi)一個比(bi)較不(bu)(bu)(bu)錯(cuo)的(de)(de)技術,因為使用傳統的(de)(de)Html.EditorForModel去渲(xuan)染(ran)(ran)是(shi)(shi)(shi)不(bu)(bu)(bu)能滿足我們要(yao)求(qiu)的(de)(de),因為他只是(shi)(shi)(shi)在頁(ye)面上(shang)渲(xuan)染(ran)(ran)Input文本框,如(ru)果希(xi)望出現下拉(la)列表,復(fu)雜(za)的(de)(de)單(dan)選和復(fu)選,它是(shi)(shi)(shi)實現不(bu)(bu)(bu)了的(de)(de),這需(xu)要(yao)我們進行定制,即自定義(yi)的(de)(de)模版!

模版(ban)文件夾位于(yu)shared/EditorTemplates/下(xia)面

這(zhe)些模版需要通過(guo)模型屬(shu)(shu)性(xing)(xing)的UIHint來(lai)指定,如[UIHint("_EnumDropdownList")],表示(shi)使用一個叫_EnumDropdownList.cshtml的模版文件(jian)來(lai)渲染(ran)這(zhe)個屬(shu)(shu)性(xing)(xing),當然對于(yu)系統(tong)模版來(lai)說,你可以直接使用它們(men),也(ye)是使用UIHint特性(xing)(xing)來(lai)指定的.

下面代碼中是我定義ViewModel的(de)代碼,有系(xi)統的(de)UIHint,如MultilineText,Bool等(deng),也有自定義的(de)模版如_EnumRadio,_EnumCheckbox等(deng)

        [DisplayName("標題")]
        public string Name { get; set; }
        [DisplayName("年紀(ji)")]
        public int Age { get; set; }
        [DisplayName("Email")]
        [UIHint("MultilineText")]
        public string Email { get; set; }
        [DisplayName("類型_EnumRadio"), EnumDataType(typeof(Type))]
        [UIHint("_EnumRadio")]
        public Type Type { get; set; }
        [DisplayName("類型_EnumCheckbox"), EnumDataType(typeof(Type))]
        [UIHint("_EnumCheckbox")]
        public Type Type2 { get; set; }
        [DisplayName("類型_EnumDropdownList"), EnumDataType(typeof(Type))]
        [UIHint("_EnumDropdownList")]
        public Type Type3 { get; set; }
        [DisplayName("出生(sheng)日(ri)期(qi)")]
        [UIHint("_DateTime")]
        public DateTime Birthday { get; set; }
        [DisplayName("性別")]
        [UIHint("Bool")]
        public bool Sex { get; set; }

我們(men)來看一下,如(ru)何在(zai)/shared/EditorTemplates下建立自定義的(de)模(mo)版(ban),下面大叔(shu)將自己(ji)的(de)幾(ji)個模(mo)版(ban)分想一下

日期時(shi)間選擇器

@model DateTime
@Html.TextBoxFor(m => m, new { onfocus = "WdatePicker({isShowWeek:true})", @class = "Wdate", })
<script src="~/Scripts/jquery-1.4.1.min.js"></script>
<script src="~/Scripts/My97DatePicker4.7/WdatePicker.js"></script>

枚舉-下拉列表框

@model Enum
@using Lind.DDD.Utils;
@Html.DropDownListFor(m => m, Enum.GetValues(Model.GetType())
    .Cast<Enum>()
    .Select(m =>
    {
        int enumVal = Convert.ToInt32(m);
        return new SelectListItem()
        {
            Selected = (Convert.ToInt32(Model)== enumVal),
            Text = m.GetDescription(),
            Value = enumVal.ToString()
        };
    }))

枚(mei)舉(ju)-單選按鈕組(zu)

@model Enum
@using Lind.DDD.Utils;
@{
    var name = Model.GetType().Name;
    var list = Enum.GetValues(Model.GetType())
     .Cast<Enum>()
     .Select(m =>
     {
         int enumVal = Convert.ToInt32(m);
         return new SelectListItem
         {
             Selected = (Convert.ToInt32(Model) == enumVal),
             Text = m.GetDescription(),
             Value = enumVal.ToString()
         };
     });
}
@foreach (var item in list)
{
    string isSel = item.Value == Convert.ToInt32(Model).ToString() ? "checked='checked'" : "";
    <input type="radio"  name="@name" id="@(name + item.Value)" value="@item.Value" @isSel/><label for="@(name + item.Value)">@item.Text</label>
}

枚舉-篩選(xuan)按鈕組

@model Enum
@using Lind.DDD.Utils;
@{
    string name = ViewData.TemplateInfo.HtmlFieldPrefix;
    var list = Enum.GetValues(Model.GetType())
    .Cast<Enum>()
    .Select(m =>
    {
        int enumVal = Convert.ToInt32(m);
        return new SelectListItem()
        {
            Selected = (Convert.ToInt32(Model) == enumVal),
            Text = m.GetDescription(),
            Value = enumVal.ToString()
        };
    });
}
@foreach (var item in list)
{
    string isSel = item.Value == Convert.ToInt32(Model).ToString() ? "checked='checked'" : "";

    <input type="checkbox" name="@name" id="@(name + item.Value)" value="@item.Value" @isSel/><label for="@(name + item.Value)">@item.Text</label>
}

怎么樣(yang),這種代碼(ma)挺有意思吧,以后再渲染(ran)時,直接(jie)在屬性(xing)上標識即可,它的View會(hui)動態去自動渲染(ran)!

這(zhe)種功能(neng)對插件模塊開發,換膚開發很有效(xiao)果!

回到目錄

posted @ 2016-10-17 14:28  張占嶺  閱讀(4558)  評論(3)    收藏  舉報