Asp.net mvc 3 用数据库中的两列填充下拉列表

Asp.net mvc 3 用数据库中的两列填充下拉列表,asp.net-mvc-3,html-helper,html-select,Asp.net Mvc 3,Html Helper,Html Select,我在做MVC3项目 在我的控制器上,我已经有了一个从StockClass表中获取Descr列的代码。之后,我用这个列表填充一个ViewBag,以便从视图中检索它并填充下拉列表 目前工作正常,但仅显示Descr字段(显然)。我想要的是在下拉列表中填充两个字段(code和Descr),格式为:“code-Descr” 我尝试了几种方法,但找不到正确编写@Html帮助程序的方法 在我的控制器中 var oc = dba.StockClass.OrderBy(q => q.Code).ToList

我在做MVC3项目

在我的控制器上,我已经有了一个从
StockClass
表中获取
Descr
列的代码。之后,我用这个列表填充一个ViewBag,以便从视图中检索它并填充下拉列表

目前工作正常,但仅显示
Descr
字段(显然)。我想要的是在下拉列表中填充两个字段(
code
Descr
),格式为:“code-Descr”

我尝试了几种方法,但找不到正确编写@Html帮助程序的方法

在我的控制器中

var oc = dba.StockClass.OrderBy(q => q.Code).ToList();
ViewBag.OrderClass = new SelectList(oc, "StockClassId", "Descr");
在我看来

@Html.DropDownList("StockClassID", (SelectList)ViewBag.OrderClass)

你能帮我吗?

我不相信有HTML助手可以帮你,但是你可以像这样得到你想要的:

var oc = dba.StockClass
    .OrderBy(q => q.Code)
    .ToDictionary(q => q.StockClassId, q => q.Code + " - " + q.Descr);

ViewBag.OrderClass = new SelectList(oc, "Key", "Value");

这还有一个优点,就是可以方便地使用
StockClassId
code
Descr
重构-如果您重命名这些属性,如果不更新这些匹配的代码,您将无法编译。

我不相信有HTML帮助程序可以为您做到这一点,但你可以像这样得到你想要的:

var oc = dba.StockClass
    .OrderBy(q => q.Code)
    .ToDictionary(q => q.StockClassId, q => q.Code + " - " + q.Descr);

ViewBag.OrderClass = new SelectList(oc, "Key", "Value");

这还有一个优点,就是可以方便地使用
StockClassId
code
Descr
重构-如果重命名这些属性,如果不更新这些匹配的代码,您将无法编译。

非常感谢!!它就像一个符咒!!关于重命名属性,你是对的…非常感谢!非常感谢你!!它就像一个符咒!!关于重命名属性,你是对的…非常感谢!