我想創建一個DropDownList,其中包含我的一個模型數據的綁定,但我希望在視圖中構建下拉項目,並且我不希望項目進入模型數據或從我的控制器。能否請你建議如何內查看 建立選擇列表的基本上我想是這樣創造的東西:在視圖中創建DropDownListFor項目
<%= Html.DropDownListFor(model=>model.SomeProperty,<<create the dropdown list items here>> %>
請建議。
-Sampat。
我想創建一個DropDownList,其中包含我的一個模型數據的綁定,但我希望在視圖中構建下拉項目,並且我不希望項目進入模型數據或從我的控制器。能否請你建議如何內查看 建立選擇列表的基本上我想是這樣創造的東西:在視圖中創建DropDownListFor項目
<%= Html.DropDownListFor(model=>model.SomeProperty,<<create the dropdown list items here>> %>
請建議。
-Sampat。
你不能這樣使用它。顧名思義,它使用指定的列表項和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>
這應該是訣竅:-)
要更新的屬性只是一個整數,根據下拉列表中選定的項目進行更新,在您的示例中「DropDownElement」是我在數據庫中的int值,現在我需要一個列表顯示在靜態名稱/值對的下拉列表中,並在提交模型時將所選值綁定到屬性。 – Sampat 2012-01-02 08:31:51
我已經用更多的圖解例子編輯了我的答案。希望它有幫助 – 2012-01-02 10:05:14
順便說一下,查看代碼是Razor語法。您需要刪除「@」並在開始時放置「<%」,最後放置「%>」。 – 2012-01-02 10:06:54
@Pankaj給你一個粗略的做法。您還可以將IEnumerable
的SelectListItem
對象從控制器傳遞給您的視圖,並基於此創建您的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
)
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! ---")
正如你可以看到這種方法是很容易的,可靠的,快速和乾淨。
希望它有幫助。
爲什麼你不想從視圖來的物品?該視圖應該只顯示數據。爲什麼你不能使用視圖模型?我有一個下拉樣本http://code.msdn.microsoft.com/Using-the-DropDownList-67f9367d – RickAndMSFT 2012-01-02 18:12:44