[英]MVC asp.net No ViewData item of type IEnumerable<SelectListItem>
[英]ASP.NET MVC - Dropdown - There is no ViewData item of type 'IEnumerable<SelectListItem>'
MenuType定義:
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;" })%>
復雜的是你似乎無法決定你使用的是哪種類型......
首先你有一個List<MenuType>
(我假設ContractTypes
實際上是MenuType
類型?)然后你創建一個SelectList
,將List<MenuType>
傳遞給它,這意味着MenuType
必須至少有兩個屬性,一個叫做Text
,一個叫Value
。 如果沒有,則必須在SelectList
構造函數參數中指定Text
和Value
屬性名稱。
之后,出於某種原因,您將其轉換為IEnumerable<SelectListItem>
,然后將其分配給ViewBag項並調用您的View。 因此,此時,ViewBag.DropDownTypeOfContract的類型為IEnumerable<SelectListItem>
。
接下來,在您的視圖中,由於某種原因,您定義了@model
而不是將任何模型傳遞給視圖。 好吧,隨你便...
所以現在我們遇到了真正的問題。
@Html.DropDownList("Codes",
(List<SelectListItem>)ViewBag.DropDownTypeOfContract ,
new { style = "max-width: 600px;" })%>
好吧,讓我們暫時忽略一下你有一個WebForms關閉代碼塊指示符(%>)的事實......這里最大的問題是你試圖將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");
注意:我發布了這個答案,但不知道您的MenuType類有哪些變量。 請添加到您的問題,我將根據您的MenuType類編輯此答案
所有下拉列表都是值和文本對的集合。
<select>
<option value=1>TEXT 1</option>
<option value=2>TEXT 2</option>
<option value=3>TEXT 3</option>
</select>
您有List<MenuType>
的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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.