2012-01-02 56 views
5

我想創建一個DropDownList,其中包含我的一個模型數據的綁定,但我希望在視圖中構建下拉項目,並且我不希望項目進入模型數據或從我的控制器。能否請你建議如何內查看 建立選擇列表的基本上我想是這樣創造的東西:在視圖中創建DropDownListFor項目

<%= Html.DropDownListFor(model=>model.SomeProperty,<<create the dropdown list items here>> %> 

請建議。

-Sampat。

+0

爲什麼你不想從視圖來的物品?該視圖應該只顯示數據。爲什麼你不能使用視圖模型?我有一個下拉樣本http://code.msdn.microsoft.com/Using-the-DropDownList-67f9367d – RickAndMSFT 2012-01-02 18:12:44

回答

6

你不能這樣使用它。顧名思義,它使用指定的列表項和HTML屬性爲由指定表達式表示的對象中的每個屬性返回一個HTML select元素。

雖然你可以考慮像下面創建這個列表對象: -

@Html.DropDownListFor(model => model.DropDownElement, 
         new SelectList(model.DropDownElement, "Id", "Name")) 

更新

我將採取國家模式的例子有ID /名稱對。就像下面

public class Country 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

現在,在你的控制器動作,你可以把它作爲一個選擇列表的:

public ActionResult YourAction() 
{ 
    YourModel yourModel = new YourModel(); // Just for reference. I suppose you must be passing some model to your view 
    ViewBag.DropDownList = new SelectList(db.Countries, "Id", "Name"); // This way you don't need to make any changes with your passing model. 
    return View(yourModel); 
} 

最後,在視圖中,您可以通過以下方式使用DropDownListFor。

@Html.DropDownListFor(model => model.YourModelProperty, 
    (IEnumerable<SelectListItem>)ViewBag.DropDownList, "---Select a value---") 

在一個旁註,如果你只是想顯示的數字與值列表,你可以直接輸入HTML和利用它,而不是使用DropDownListFor。像follwing

<select id="yourModelPropertyName" name="yourModelPropertyName"> 
    <option value="">---Select Value---</option> 
    <option value="1">India</option> 
    <option value="2">Australia</option> 
    <option value="3">US</option> 
    <option value="4">England</option> 
    <option value="5">Finland</option> 
</select> 

只要確保「yourModelPropertyName」是正確的,它應該是一個你希望它更新

更多更新

在您灣的美景物業不顯示選定的值,使用下面的代碼

<select id="yourModelPropertyName" name="yourModelPropertyName"> 
    <option selected="selected" value="1">@model.YourDropDownList</option> 
    <option value="2">India</option> 
    <option value="3">Australia</option> 
</select> 

這應該是訣竅:-)

+0

要更新的屬性只是一個整數,根據下拉列表中選定的項目進行更新,在您的示例中「DropDownElement」是我在數據庫中的int值,現在我需要一個列表顯示在靜態名稱/值對的下拉列表中,並在提交模型時將所選值綁定到屬性。 – Sampat 2012-01-02 08:31:51

+0

我已經用更多的圖解例子編輯了我的答案。希望它有幫助 – 2012-01-02 10:05:14

+0

順便說一下,查看代碼是Razor語法。您需要刪除「@」並在開始時放置「<%」,最後放置「%>」。 – 2012-01-02 10:06:54

1

@Pankaj給你一個粗略的做法。您還可以將IEnumerableSelectListItem對象從控制器傳遞給您的視圖,並基於此創建您的select元素。

這裏是一個很好的例子:

A Way of Working with Html Select Element (AKA DropDownList) In ASP.NET MVC

試想一下,你的控制器看起來是這樣的:

public ActionResult Index() { 

    var products = productRepo.GetAll(); 

    registerProductCategorySelectListViewBag(); 
    return View(products); 
} 

private void registerProductCategorySelectListViewBag() { 

    ViewBag.ProductCategorySelectList = 
     productCategoryRepo.GetAll().Select(
      c => new SelectListItem { 
       Text = c.CategoryName, 
       Value = c.CategoryId.ToString() 
      } 
     ); 
} 

對你的看法,DropDownListFor HTML輔助看起來應該是這樣的:

@Html.DropDownListFor(m => m.CategoryId, 
    (IEnumerable<SelectListItem>)ViewBag.ProductCategorySelectList 
) 
0

Sa mpat,當我離開這個問題時,我確信你已經完成了你的應用程序,並且你的解決方案已經啓動並正在運行。

但我想爲那些仍在尋找乾淨,簡單,快速方法的人留下這個答案。
所以我們現在需要用一些項目來填充DropDownList。
對於這種方法,我打算在我看來使用@Html.DropDownList,並將必要的數據傳遞給它,我將在我的控制器中使用神奇的ViewBag

這裏是我的控制器含有我需要填充我的DropDownList的數據:

public ActionResult Index() 
     { 
      List<SelectListItem> items = new List<SelectListItem>(); 
      items.Add(new SelectListItem 
      { 
       Text = "Option 1", 
       Value = "1" 
      }); 
      items.Add(new SelectListItem 
      { 
       Text = "Option 2", 
       Value = "2" 
      }); 
      ViewBag.DDLItems = items; 
      return View(); 
     } 

正如你所看到的,我做了一個列表對象,然後添加兩個項目到它。最後,我過去所有的物品進入我的ViewBag,我只是把它叫做DDLItems
現在讓我們看看如何將項目綁定到@html.DropDownList我們認爲

@Html.DropDownList("DropDownListID", new SelectList(ViewBag.DDLItems, "Value", "Text"), "--- Please Choose an Item! ---") 

正如你可以看到這種方法是很容易的,可靠的,快速和乾淨。

希望它有幫助。

相關問題