我們正在從Webforms轉向ASP.NET MVC。如何在ASP.NET MVC中處理大量的下拉菜單
我們的主頁最多可以有130個下拉列表,每個列表中都有5到50個值。
在webforms /代碼背後是一件簡單的事情。但是在MVC中,在後面的代碼中沒有服務器控件,似乎處理這個問題的唯一方法是傳入一個以字段名稱爲索引的巨大json字符串,然後依靠jQuery來解析事情。
有什麼建議嗎?
我們正在從Webforms轉向ASP.NET MVC。如何在ASP.NET MVC中處理大量的下拉菜單
我們的主頁最多可以有130個下拉列表,每個列表中都有5到50個值。
在webforms /代碼背後是一件簡單的事情。但是在MVC中,在後面的代碼中沒有服務器控件,似乎處理這個問題的唯一方法是傳入一個以字段名稱爲索引的巨大json字符串,然後依靠jQuery來解析事情。
有什麼建議嗎?
您可以在視圖中添加HTML幫助
在控制器public ActionResult Index(string val, bool? inStock)
{
var viewModel = new ItemSearchViewModel();
viewModel.ListOfItems = new SelectList(_service.GetListOfItem(), "ItemID", "ItemName"); //field to use ItemID as value ItemName as text
return View(viewModel);
}
在查看
@Html.DropDownList("ItemDropdown1", Model.ListOfItems, "Select Item...")
你可以看看更多的教程下拉列表中here
只是爲了擴大位於@fedri的答案.....
既然你有這麼多的下拉菜單,我強烈建議你使用viewmodel類來組織下拉菜單。 (我不會深究爲什麼你有這麼多的下拉菜單,因爲它看起來像一個過度的數額,但我猜設計有它的原因)。
首先,視圖模型僅僅是一個例如class
,
public class IndexViewModel
{
public List<SelectListItem> Dropdown1 { get; set; }
public string Dropdown1SelectedItem { get; set; }
}
我通過將它的一個實例傳遞給視圖來使用這個viewmodel。
public class HomeController : Controller
{
public ActionResult Index()
{
var viewModel = new IndexViewModel();
viewModel.Dropdown1 = new List<SelectListItem>();
viewModel.Dropdown1.Add(new SelectListItem() { Text = "Item 1", Value = "23" });
return View(viewModel);
}
}
@model WebApplication3.Controllers.IndexViewModel
@using (Html.BeginForm())
{
@Html.DropDownList(nameof(Model.Dropdown1SelectedItem), Model.Dropdown1, "Select item...")
<input type="submit" value="Save" />
}
當我回來後的數據,的Dropdown1
選定值存儲在Dropdown1SelectedItem
。
[HttpPost]
public ActionResult Index(IndexViewModel viewModel)
{
//viewModel.Dropdown1SelectedItem will contain the Value property of the item you selected.
return View();
}
這很簡單,可以讓您啓動並運行。困難的部分是組織你的視圖模型來迎合這麼多的下拉菜單,以防你最終迷路。但是,如果您足夠好地命名下拉屬性,那麼我認爲它不應該太糟糕。
編輯:
如果你必須通過下拉菜單中的數據備份通過AJAX/jQuery的,而不是從一個回傳,然後我看不出不使用JSON結構來傳遞數據會工作。在這種情況下,我會強烈檢查設計,並檢查是否有100多個下拉列表可以在一次點擊中發佈數據。
沒有代碼背後,因爲MVC從背後的代碼中解耦UI。您仍然可以根據需要在視圖上放置儘可能多的下拉框。只需使用您的控制器和業務服務爲模型上的每個下拉列表中需要綁定的每個「SelectListItems」列表設置一個屬性即可。 – Wheels73
在web表單中,我們傳遞更多的數據,然後mvc,在MVC上這是更簡單和乾淨,請參閱http://stackoverflow.com/questions/14654873/asp-net-mvc-4-viewmodel-with-dropdownlist-data? – Anil