[英]Html.DropDownListFor binding problem
所以我有這兩個表 - 產品,measurement_unit 。
產品:(id int,name varchar(20),id_um INT)其中id_um是對measurement_unit表的主鍵的引用,id是該表的主鍵。
Measurement_unit:(id_um int,name varchar(20))。 id_um是我使用LINQ to SQL映射兩者的主鍵。
當我想創建一個新產品時,我需要從單位測量列表中進行選擇,這意味着一個帶有名稱的下拉列表,但我想綁定所選產品的ID ....
我在控制器中執行此操作以創建操作(創建新產品):
var items = new List<SelectListItem>();
foreach (var t in db.measurement_unit)
items.Add(new SelectListItem() { Text = t.name.ToString(), Value =t.id_um.ToString() });
ViewData["UM"] = new SelectList(items, "Value", "Text");
現在,對於視圖:
<%: Html.DropDownListFor(model=>model.id_um, (IEnumerable <SelectListItem>)ViewData["UM"])%>
但是我收到以下錯誤:
The ViewData item that has the key 'id_um' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'.
我之前一直在努力解決這個問題,之前我成功地完成了它,但我不小心刪除了那個項目。 請告訴我,我做錯了什么? 謝謝!
我建議你使用視圖模型而不是ViewData
。 它將使代碼更清晰/更安全/重構更友好/智能感知/更容易單元測試/魔術字符串免費/ ....:
public class MyViewModel
{
public int Id { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
位指示:
public class HomeController: Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Items = db.measurement_unit.Select(x => new SelectListItem
{
Value = x.id_um.ToString(),
Text = x.name.ToString()
})
};
return View(model);
}
}
最后在強類型視圖中:
<%= Html.DropDownListFor(
x => x.Id,
new SelectList(Model.Items, "Value", "Text")
) %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.