日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解ASP.NETMVC中DropDownList的使用

本文我們將講解DropDownList的使用,這在ASP.NET MVC中算是比較常見的控件。該方法對(duì)于使用HtmlHelper比較方便。

成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司十余年經(jīng)驗(yàn)成就非凡,專業(yè)從事網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)頁(yè)制作,軟文平臺(tái)廣告投放平臺(tái)等。十余年來(lái)已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:028-86922220,我們期待您的來(lái)電!

在ASP.NET MVC中,盡管我們可以直接在頁(yè)面中編寫HTML控件,并綁定控件的屬性,但更方便的辦法還是使用HtmlHelper中的輔助方法。在View中,包含一個(gè)類型為HtmlHelper的屬性Html,它為我們呈現(xiàn)控件提供了捷徑。

我們今天主要來(lái)討論Html.DropDownList的用法,首先從Html.TextBox開始。

Html.TextBox有一個(gè)重載方法形式如下:

public static string TextBox(this HtmlHelper htmlHelper, string name, object value);其中name參數(shù)為文本框name屬性(以及id屬性)的值,value參數(shù)為文本框的默認(rèn)值(即value屬性的值)。如果value參數(shù)為null或者使用沒有value參數(shù)的重載方法,那么此時(shí)name參數(shù)同時(shí)還是一個(gè)鍵值,負(fù)責(zé)獲取文本框的默認(rèn)值。獲取的順序?yàn)椋葟腣iewData中查找是否存在鍵值為name值的項(xiàng),如果ViewData中沒有則從ViewData.Model中查找是否存在名稱為name值的屬性,如果仍然不存在,則返回null。(具體參見HtmlHelper的InputHelper輔助方法)

也就是說(shuō)

 
 
 
  1. public ActionResult Test()  
  2. {  
  3.     ViewData["Name"] = "Jade";  
  4.     return View();  
  5. }  
  6. <%= Html.TextBox("Name")%> 

這樣的代碼將會(huì)輸出這樣的HTML:

 
 
 
  1.  id="Name" name="Name" type="text" value="Jade" /> 

由于TextBox的id和name屬性的值與ViewData中的某一項(xiàng)同名(均為Name),因此TextBox的value屬性的值將自動(dòng)綁定為ViewData中Name項(xiàng)的值。不僅是ViewData,如果view model的類型包含Name屬性,也將輸出同樣的結(jié)果:

 
 
 
  1. var user = new User { Name = "Jade" };  
  2. ViewData.Model = user;  
  3. return View(); 

如果ViewData和ViewData.Model中同時(shí)存在Name,則優(yōu)先使用ViewData中的項(xiàng)。

CheckBox、Hidden、Password、RedioButton等控件也是如此,它們與TextBox一樣都使用input標(biāo)記,屬性綁定的規(guī)則大致相同。

DropDownList則與TextBox等控件不同,它使用的是select標(biāo)記。它需要兩個(gè)值:在下拉框中顯示的列表,和默認(rèn)選項(xiàng)。而自動(dòng)綁定一次只能綁定一個(gè)屬性,因此你需要根據(jù)需要選擇是綁定列表,還是默認(rèn)選項(xiàng)。

DropDownList擴(kuò)展方法的各個(gè)重載版本“基本上”都會(huì)傳遞到這個(gè)方法上:

 
 
 
  1. public static string DropDownList(this HtmlHelper htmlHelper,   
  2.     string name,   
  3.     IEnumerable selectList,   
  4.     string optionLabel,   
  5.     IDictionary<stringobject> htmlAttributes) {  
  6.     …  

如果沒有指定selectList,該方法將自動(dòng)綁定列表,即從ViewData中查找name所對(duì)應(yīng)的值。如果提供了selectList,將自動(dòng)綁定默認(rèn)選項(xiàng),即從selectList中找到Selected屬性為true的SelectedListItem。(具體參見HtmlHelper方法的SelectInternal輔助方法)

例1:如果在Action方法中有如下代碼:

 
 
 
  1. List items = new List();  
  2. items.Add(new SelectListItem { Text = "Kirin", Value = "29" });  
  3. items.Add(new SelectListItem { Text = "Jade", Value = "28", Selected = true});  
  4. items.Add(new SelectListItem { Text = "Yao", Value = "24"});  
  5. this.ViewData["list"] = items; 

在View中這樣使用:

<%=Html.DropDownList("list")%>那么輔助方法將率先從ViewData中獲取key為list的項(xiàng),如果該項(xiàng)為IEnumerable類型則綁定到下拉框中,否則將拋出InvalidOperationException。由于第二個(gè)SelectListItem的Selected為true,則默認(rèn)選中第二個(gè)。

例2:如果Action中代碼如下:

 
 
 
  1. List items = new List();  
  2. items.Add(new SelectListItem { Text = "Kirin", Value = "29" });  
  3. items.Add(new SelectListItem { Text = "Jade", Value = "28"});  
  4. items.Add(new SelectListItem { Text = "Yao", Value = "24"});  
  5. this.ViewData["list"] = items;  
  6. this.ViewData["selected"] = 24; 

View中的代碼如下:

 
 
 
  1. <%=Html.DropDownList("selected", ViewData["list"] as IEnumerable)%> 

那么輔助方法將ViewData["list"]綁定為下拉框,然后從ViewData中獲取key為selected的項(xiàng),并將下list中Value值與該項(xiàng)的值相等的SelecteListItem設(shè)為默認(rèn)選中項(xiàng)。

以上兩種方法盡管可以實(shí)現(xiàn)DropDownList的正確顯示,但并非最佳實(shí)踐。在實(shí)際項(xiàng)目中,我們更希望在代碼中使用強(qiáng)類型。例如上面兩例中,SelectListItem的Text和Value本來(lái)是User對(duì)象的Name和Age屬性,然而上面的代碼卻絲毫體現(xiàn)不出這種對(duì)應(yīng)關(guān)系。如果User列表是從數(shù)據(jù)庫(kù)或其他外部資源中獲得的,我們難道要用這樣的方式來(lái)綁定嗎?

 
 
 
  1. var users = GetUsers();  
  2. foreach (var user in users)  
  3. {  
  4.     items.Add(new SelectListItem { Text = user.Name, Value = user.Age.ToString() });  

這顯然是我們所無(wú)法容忍的。那么什么是最佳實(shí)踐呢?

ASP.NET MVC為DropDownList和ListBox(都在html中使用select標(biāo)記)準(zhǔn)備了一個(gè)輔助類型:SelectList。SelectList繼承自MultiSelectList,而后者實(shí)現(xiàn)了IEnumerable。也就是說(shuō),SelectList可以直接作為Html.DropDownList方法的第二個(gè)參數(shù)。

MultiSelectList包含四個(gè)屬性,分別為:

Items:用于在select標(biāo)記中出現(xiàn)的列表,通常使用option標(biāo)記表示。IEnumerable類型。

DataTextField:作為option的text項(xiàng),string類型。

DataValueField:作為option的value項(xiàng),string類型。

SelectedValues:選中項(xiàng)的value值,IEnumerable類型。

顯然,作為DropDownList來(lái)說(shuō),選中項(xiàng)不可能為IEnumerable,因此SelectList提供了一個(gè)新的屬性:

SelectedValue:選中項(xiàng)的value值,object類型。

同時(shí),SelectList的構(gòu)造函數(shù)如下所示:

 
 
 
  1. public SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue)  
  2.     : base(items, dataValueField, dataTextField, ToEnumerable(selectedValue)) {  
  3.     SelectedValue = selectedValue;  

于是我們的代碼變?yōu)椋?/p>

 
 
 
  1. var users = GetUsers();  
  2. var selectList = new SelectList(users, "Age", "Name", "24");  
  3. this.ViewData["list"] = selectList;  
  4. <%=Html.DropDownList("list")%> 

當(dāng)然,你也可以使用不帶selectedValue參數(shù)的構(gòu)造函數(shù)重載,而在view中顯式指定IEnumerable,并在ViewData或view model中指定其他與DropDownList同名的項(xiàng)作為默認(rèn)選項(xiàng)。

最后讓我們來(lái)回顧一下DropDownList的三種用法:

建立IEnumerable并在其中指定默認(rèn)選中項(xiàng)。

建立IEnumerable,在單獨(dú)的ViewData項(xiàng)或view model的屬性中指定默認(rèn)選中項(xiàng)。

使用SelectList。

好了,關(guān)于DropDownList的用法我們今天就討論到這里,您會(huì)用了嗎?


分享題目:詳解ASP.NETMVC中DropDownList的使用
當(dāng)前地址:http://www.5511xx.com/article/dhcdiid.html