ASP.NET MVC的Model中繼資料與Model模板:預定義模板

來源:互聯網
上載者:User

通過ModelMetadata表示的Model中繼資料的一個主要的作用在於為定義在HtmlHelper和HtmlHelper<TModel>中的模板方法(這些模板方法包括Display/DisplayFor、Editor/EditorFor、DisplayForModel/EditForModel、Lable/LabelFor和DisplayText/DisplayTextFor等)提供用於最終產生HTML的中繼資料資訊。在調用這些方法的時候,如果我們指定了一個具體的通過分部View定義的模板,或者對應的ModelMetadata的TemplateHint屬性具有一個模板名稱,會自動採用該模板來產生最終的HTML。如果沒有指定模板名稱,則會根據資料類型在預定義的目錄下去尋找做模板的分部View。如果找不到,則會利用預設的模板進行HTML的呈現。為了讓讀者對模板具有一個大概的認識,我們來做一個簡單的執行個體示範。

一、 執行個體示範:通過模板將布爾值顯示為RadioButton

在預設的情況下,不論是對於編輯模式還是顯示模式,一個布爾類型的屬性值總是以一個CheckBox的形式呈現出來。我們建立如下一個表示員工的類型Employee,它具有一個布爾類型的屬性IsPartTime表示該員工是否為兼職。

   1: public class Employee
2: {
3: [DisplayName("姓名")]
4: public string Name { get; set; }
5:
6: [DisplayName("部門")]
7: public string Department { get; set; }
8:
9: [DisplayName("是否兼職")]
10: public bool IsPartTime { get; set; }
11: }

如果我們直接調用HtmlHelper<TModel>的EditorForModel方法將一個Employee對象顯示在某個將Employee類型作為Model的強型別View中,下圖體現了預設的呈現效果。我們可以看到表示是否為兼職的IsPartTime屬性對應著一個CheckBox。

現在我們希望的是將所有布爾類型對象顯示為兩個RadioButton,具體的顯示效果如下圖所示。那麼我們就可以通過建立一個Model類型為Boolean的View來建立一個模板,使之改變所有布爾類型對象的預設呈現效果。

由於我們需要改變的是布爾類型對象在編輯模式下的呈現形式,所以我們需要將作為模板的分布View定義在EditorTemplates目錄下,這個目錄可以存在於Views/ Shared下,也可以存在於Views/{ControllerName}下。由於ASP.NET MVC是採用資料類型作為匹配條件來尋找對應的模板的,所以我們需要將分部模板View命名為Boolean。下面的代碼片斷體現了這個分部試圖的整個定義,我們通過調用HtmlHelper的RadioButton方法將兩個布爾值(True/False)映射為對應的RadioButton,並且採用<table>來布局。

   1: @model bool
2: <table>
3: <tr>
4: <td>@Html.RadioButton("",true,Model)是</td>
5: <td>@Html.RadioButton("",false,!Model)否</td>
6: </tr>
7: </table>

值得一提的是,我們沒有指定RadioButton的名稱,而是指定一個Null 字元串,Html本身會對其進行命名,而命名的依據就是本章介紹的核心:Model中繼資料。Employee的IspartTime屬性呈現在介面上對應的HTML如下所示,我們可以看到兩個類型為radio的<input>元素的name被自動賦上了對應的屬性名稱。美中不足的是它們具有相同的ID,如果希望讓ID具有唯一性,可以對模板進行更加細緻的定製。

   1: <div class="editor-label"><label for="IsPartTime">是否兼職</label></div>
2: <div class="editor-field">
3: <table>
4: <tr>
5: <td><input checked="checked" id="IsPartTime" name="IsPartTime" type="radio" value="True" .../>是</td>
6: <td><input id="IsPartTime" name="IsPartTime" type="radio" value="False" />否</td>
7: </tr>
8: </table>
9: </div>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.