如何在ASP.NET MVC中处理大量下拉列表
我们将从Webforms迁移到ASP.NETMVC 我们的主页可以有多达130个下拉列表,每个列表中有5到50个值 在webforms/代码中,这是一个简单的问题。但是在MVC中,由于代码中没有服务器控件,处理这个问题的唯一方法似乎是传入一个在字段名上建立索引的巨大json字符串,然后依靠jQuery解析出来如何在ASP.NET MVC中处理大量下拉列表,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我们将从Webforms迁移到ASP.NETMVC 我们的主页可以有多达130个下拉列表,每个列表中有5到50个值 在webforms/代码中,这是一个简单的问题。但是在MVC中,由于代码中没有服务器控件,处理这个问题的唯一方法似乎是传入一个在字段名上建立索引的巨大json字符串,然后依靠jQuery解析出来 有什么建议吗?您可以在视图中添加Html帮助程序 内部控制器 public ActionResult Index(string val, bool? inStock) {
有什么建议吗?您可以在视图中添加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...")
您可以在的下拉列表中查看更多教程,只需对@fedri的答案进行一点扩展 由于您有这么多下拉列表,我强烈建议您使用viewmodel类来组织下拉列表。我不想解释为什么会有这么多下拉列表,因为它看起来确实太多了,但我想设计有它的原因 首先,viewmodel只是一个类,例如 这很简单,可以让你启动并运行。最困难的部分是组织viewmodel以适应如此多的下拉列表,以防最终迷失方向。但是,如果您对下拉属性的命名足够好,那么我想应该不会太糟糕 编辑:
如果您必须通过AJAX/jQuery而不是postback来传递下拉数据,那么我看不出不使用JSON结构来传递数据是如何工作的。在这种情况下,我会仔细研究设计,并检查100多个下拉列表是否适合一次性发布数据。没有代码隐藏,因为MVC将UI从代码隐藏中分离出来。您仍然可以根据需要在视图上放置任意多个下拉列表。只需使用您的控制器和业务服务在模型上为您需要绑定到的每个下拉列表项的每个SelectListItems列表设置一个属性。在web表单中,我们传递的数据比mvc多,在mvc上这更简单和干净,请参阅?
public class IndexViewModel
{
public List<SelectListItem> Dropdown1 { get; set; }
public string Dropdown1SelectedItem { get; set; }
}
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" />
}
[HttpPost]
public ActionResult Index(IndexViewModel viewModel)
{
//viewModel.Dropdown1SelectedItem will contain the Value property of the item you selected.
return View();
}