成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解ASP.NET MVC中DropDownList的使用

開發 后端
在這里我們將介紹ASP.NET MVC中DropDownList的使用,希望能對大家了解ASP.NET MVC模式有所幫助。

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

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

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

Html.TextBox有一個重載方法形式如下:

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

也就是說

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

這樣的代碼將會輸出這樣的HTML:

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

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

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

如果ViewData和ViewData.Model中同時存在Name,則優先使用ViewData中的項。

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

DropDownList則與TextBox等控件不同,它使用的是select標記。它需要兩個值:在下拉框中顯示的列表,和默認選項。而自動綁定一次只能綁定一個屬性,因此你需要根據需要選擇是綁定列表,還是默認選項。

DropDownList擴展方法的各個重載版本“基本上”都會傳遞到這個方法上:

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

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

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

  1. List<SelectListItem> items = new List<SelectListItem>();  
  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的項,如果該項為IEnumerable<SelectedListItem>類型則綁定到下拉框中,否則將拋出InvalidOperationException。由于第二個SelectListItem的Selected為true,則默認選中第二個。

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

  1. List<SelectListItem> items = new List<SelectListItem>();  
  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<SelectListItem>)%> 

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

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

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

這顯然是我們所無法容忍的。那么什么是最佳實踐呢?

ASP.NET MVC為DropDownList和ListBox(都在html中使用select標記)準備了一個輔助類型:SelectList。SelectList繼承自MultiSelectList,而后者實現了IEnumerable<SelectListItem>。也就是說,SelectList可以直接作為Html.DropDownList方法的第二個參數。

MultiSelectList包含四個屬性,分別為:

Items:用于在select標記中出現的列表,通常使用option標記表示。IEnumerable類型。

DataTextField:作為option的text項,string類型。

DataValueField:作為option的value項,string類型。

SelectedValues:選中項的value值,IEnumerable類型。

顯然,作為DropDownList來說,選中項不可能為IEnumerable,因此SelectList提供了一個新的屬性:

SelectedValue:選中項的value值,object類型。

同時,SelectList的構造函數如下所示:

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

于是我們的代碼變為:

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

當然,你也可以使用不帶selectedValue參數的構造函數重載,而在view中顯式指定IEnumerable<SelectListItem>,并在ViewData或view model中指定其他與DropDownList同名的項作為默認選項。

最后讓我們來回顧一下DropDownList的三種用法:

建立IEnumerable<SelectListItem>并在其中指定默認選中項。

建立IEnumerable<SelectListItem>,在單獨的ViewData項或view model的屬性中指定默認選中項。

使用SelectList。

好了,關于DropDownList的用法我們今天就討論到這里,您會用了嗎?

原文標題:在ASP.NET MVC中使用DropDownList

鏈接:http://www.cnblogs.com/kirinboy/archive/2009/10/28/use-dropdownlist-in-asp-net-mvc.html

【編輯推薦】

  1. 詳解ASP.NET MVC分頁的實現方法
  2. ASP.NET MVC與WebForm區別談
  3. ASP.NET MVC應用程序執行過程分析
  4. ASP.NET MVC分頁控件的實現
  5. 有關ASP.NET MVC框架的一些基礎知識
責任編輯:彭凡 來源: 51CTO.com
相關推薦

2009-07-27 09:45:14

ASP.NET Dro

2011-04-14 09:19:22

ASP.NET MVC

2010-02-03 09:50:58

ASP.NET MVC

2010-03-19 09:17:16

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-27 10:22:43

ASP.NET Dro

2009-03-06 10:28:30

MVCASP.NET異步Action

2009-09-10 09:50:47

ASP.NET MVC

2009-09-18 10:20:26

PRG數據驗證

2009-07-22 13:16:04

MvcAjaxPaneASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-31 12:43:59

ASP.NET MVC

2009-12-01 09:30:34

ASP.NET MVC

2010-09-15 09:18:21

ASP.NET MVC

2011-01-28 09:45:29

ASP.NET MVC

2010-10-12 09:52:02

ASP.NET MVC

2009-06-12 09:24:34

ASP.NET窗體ASP.NET MVC

2009-07-22 16:34:36

使用T4ASP.NET MVC

2009-07-22 09:36:54

使用UpdataModASP.NET MVC

2009-04-08 09:58:07

ASP.NET MVCTempData框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产黄色在线 | 亚洲一区视频在线播放 | www.久| 国产乱码精品一区二区三区中文 | 超碰在线人人干 | 国产线视频精品免费观看视频 | 久久精品av麻豆的观看方式 | 国产精品一区二区在线播放 | 欧美激情综合五月色丁香小说 | 国产精品久久久久久久久久免费看 | 久久久精| 日韩午夜场 | 福利社午夜影院 | 欧美成视频| 国产日韩欧美一区 | 欧美日韩国产在线观看 | 国产中文视频 | 日韩电影中文字幕 | 黄色一级免费看 | 黄色a视频| 美女国内精品自产拍在线播放 | 午夜精品久久久久久久99黑人 | 欧美成人视屏 | 性一爱一乱一交一视频 | 日本在线免费 | 精品一区二区久久 | 蜜臀网 | 91超碰在线 | 亚洲一卡二卡 | 久久精品国产一区老色匹 | 97人人澡人人爽91综合色 | 欧美精品一区二区在线观看 | 久久不射电影网 | 毛片黄片免费看 | 中文字幕亚洲国产 | 黄色一级大片在线免费看产 | 日韩在线一区二区 | 久久久久久国 | 亚洲国产精久久久久久久 | 一区欧美 | 国产一级片91 |