繁体   English   中英

Html.DropDownListFor绑定问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM