所以我有两个表-产品,measurement_unit。
产品:( int,name varchar(20),id_um INT ),其中id_um是对该表的主键的引用,id是该表的主键。
Measurement_unit:(id_um int,名称varchar(20))。id_um是我使用LINQ映射两者的主键。
当我想要创建一个新产品时,我需要从一个单位度量列表中选择,这意味着下拉列表中有他们的名字,但是我想绑定所选的一个的id .
我在Create操作的控制器(创建一个新产品)中这样做:
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>'.我以前和这件事做过斗争,之前我成功地让它发挥作用,但我无意中删除了这个项目。请告诉我我做错了什么?谢谢!
发布于 2011-05-11 14:01:40
我建议您使用视图模型而不是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")
) %>https://stackoverflow.com/questions/5963482
复制相似问题