MenuType definiation:
public string Code { get; set; }
public string Name { get; set; }
ASP.NET MVC 5
在我发布问题之前,我已经搜索过并阅读了
我正在尝试加载asp.net mvc下拉列表中的数据为什么这么复杂?
//控制器
public class ClientController : BaseController
{
public ActionResult Index()
{
List<MenuType> ctypelist = db.ContractTypes.OrderBy(x => x.TypeOfContract).ToList();
IEnumerable<SelectListItem> list = new SelectList(ctypelist.ToList());
ViewBag.DropDownTypeOfContract = list;
return View();
}
}
// HTML
@model myapp.Models.Client
@Html.DropDownList("Codes", (List<SelectListItem>)ViewBag.DropDownTypeOfContract , new { style = "max-width: 600px;" })%>
答案 0 :(得分:2)
复杂的是,您无法决定使用哪种类型......
首先你有一个List<MenuType>
(我认为ContractTypes
实际上属于MenuType
类型?)然后你创建一个SelectList
,将List<MenuType>
传递给它,这意味着MenuType
必须至少有两个属性,一个名为Text
,一个名为Value
。如果没有,则必须在Text
构造函数参数中指定Value
和SelectList
属性名称。
之后,出于某种原因,您将其转换为IEnumerable<SelectListItem>
,然后将其分配给ViewBag项并调用您的View。因此,此时,ViewBag.DropDownTypeOfContract的类型为IEnumerable<SelectListItem>
。
接下来,在您的视图中,您出于某种原因定义了@model
,而没有将任何模型传递给视图。好的......无论如何......
所以现在我们遇到了真正的问题。
@Html.DropDownList("Codes",
(List<SelectListItem>)ViewBag.DropDownTypeOfContract ,
new { style = "max-width: 600px;" })%>
好吧,让我们暂时忽略一下因为某种原因你有一个WebForms关闭代码块指示符(%&gt;)的事实......这里最大的问题是你正在尝试施放ViewBag.DropDownTypeOfContract
到List<SelectListItem>
,这不是,而且从来没有。
您已将List<MenuType>
转换为SelectList
,然后转换为IEnumerable<SelectListItem>
。从来没有涉及List<SelectListItem>
。
所以,简单的修复(除了重写你的代码是理智的)是改变你的演员:
@Html.DropDownList("Codes",
(IEnumerable<SelectListItem>)ViewBag.DropDownTypeOfContract,
new { style = "max-width: 600px;" })
编辑:
由于您的MenuType不包含相应的属性,因此您必须修改SelectList(我在上面提到)。仅供参考,ctypelist已经是一个列表,无需再次将其转换为列表......这只是愚蠢的。
IEnumerable<SelectListItem> list = new SelectList(ctypelist, "Code", "Name");
答案 1 :(得分:1)
注意:我发布了这个答案,但不知道您的MenuType类有哪些变量。请添加到您的问题,我将根据您的MenuType类
编辑此答案所有下拉列表都是值和文本对的集合。
<select>
<option value=1>TEXT 1</option>
<option value=2>TEXT 2</option>
<option value=3>TEXT 3</option>
</select>
您有一个List<MenuType>
列表,您希望在DropDown列表中显示MenuType中的哪些值?
假设您将此作为MenuType.cs
public class MenuType
{
public int MenuTypeId {get;set;}
public string Name {get;set;}
}
你的dropDown应该像这样生成:
public ActionResult Index()
{
Dictionary<int,string> ctypelist = db.ContractTypes.OrderBy(x => x.TypeOfContract).ToDictionary(s => s.MenuTypeId, s=> s.Name);
IEnumerable<SelectListItem> selectListItems = ctypelist.Select(s => new SelectListItem() { Value = s.Key.ToString(), Text = s.Value });
ViewBag.DropDownTypeOfContract = selectListItems;
return View();
}
在视图中:
@{
var items = (IEnumerable<SelectListItem>) ViewBag.DropDownTypeOfContract;
}
@Html.DropDownList("Codes", items , "Select Item")