首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Html.DropDownListFor绑定问题

Html.DropDownListFor绑定问题
EN

Stack Overflow用户
提问于 2011-05-11 11:29:43
回答 1查看 2.8K关注 0票数 4

所以我有两个表-产品,measurement_unit

产品:( int,name varchar(20),id_um INT ),其中id_um是对该表的主键的引用,id是该表的主键。

Measurement_unit:(id_um int,名称varchar(20))。id_um是我使用LINQ映射两者的主键。

当我想要创建一个新产品时,我需要从一个单位度量列表中选择,这意味着下拉列表中有他们的名字,但是我想绑定所选的一个的id .

我在Create操作的控制器(创建一个新产品)中这样做:

代码语言:javascript
复制
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");

现在,关于这一观点:

代码语言:javascript
复制
<%: Html.DropDownListFor(model=>model.id_um,  (IEnumerable <SelectListItem>)ViewData["UM"])%>

但我得到了以下错误:

代码语言:javascript
复制
The ViewData item that has the key 'id_um' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'.

我以前和这件事做过斗争,之前我成功地让它发挥作用,但我无意中删除了这个项目。请告诉我我做错了什么?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-11 14:01:40

我建议您使用视图模型而不是ViewData。它将使代码更加干净/更安全/重构更友好/智能感知启用/更易于单元测试/魔术字符串释放/.:

代码语言:javascript
复制
public class MyViewModel
{
    public int Id { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

康托勒:

代码语言:javascript
复制
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);
    }
}

最后,在强类型的视图中:

代码语言:javascript
复制
<%= Html.DropDownListFor(
    x => x.Id,
    new SelectList(Model.Items, "Value", "Text")
) %>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5963482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档