C# 从多个db列为创建@Html.DropdownList

C# 从多个db列为创建@Html.DropdownList,c#,asp.net,linq,asp.net-mvc-4,entity-framework-5,C#,Asp.net,Linq,Asp.net Mvc 4,Entity Framework 5,当v.ID在我的模型中是一个整数属性时,有人能帮我弄清楚我该怎么做吗 ViewBag.VendorID = new SelectList(db.Vendors.Select(v => new SelectListItem { Value = v.ID, Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname) }), "Text", "Value"); return View(); 我

当v.ID在我的模型中是一个整数属性时,有人能帮我弄清楚我该怎么做吗

ViewBag.VendorID = new SelectList(db.Vendors.Select(v => new SelectListItem
{
    Value = v.ID,
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname)
}), "Text", "Value");

return View();
我试图将模型中的几个属性合并到下拉列表的文本中。这显示了一个编译时错误,但是如果我将其更改为

ViewBag.VendorID = new SelectList(db.Vendors.Select(v => new SelectListItem
{
    Value = v.ID.ToString(),
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname)
}), "Text", "Value");
那么从我的观点来看这条线

@Html.DropDownList("VendorID", (SelectList)ViewBag.VendorID)
引发运行时错误:

LINQ to Entities无法识别方法“System.String ToString()”方法,并且无法将此方法转换为存储表达式

有没有想过如何解决这个看似简单的任务

谢谢大家


Jason.

不能在Linq to SQL中直接使用
string.Format
。您需要首先枚举列表:

ViewBag.VendorID = db.Vendors.ToList().Select(v => new SelectListItem
{
    Value = v.ID,
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname)
});

return View();

注意上面添加的
.ToList()
。我还删除了
SelectList
构造函数,因为
DropDownList
接受您自己生成的
IEnumerable

您不能在Linq to SQL中直接使用
string.Format
。您需要首先枚举列表:

ViewBag.VendorID = db.Vendors.ToList().Select(v => new SelectListItem
{
    Value = v.ID,
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname)
});

return View();

注意上面添加的
.ToList()
。我还删除了
SelectList
构造函数,因为
DropDownList
接受一个您自己生成的
IEnumerable

这与SelectList构造函数一起工作。但是,一旦删除,将引发异常:无法将类型为“WhereSelectListIterator`2[Model.Vendor,System.Web.Mvc.SelectListItem]”的对象强制转换为类型为“System.Web.Mvc.SelectList”。有什么想法或者我应该让构造函数留在原地吗?只需删除视图中
SelectList
的强制转换:
@Html.DropDownList(“VendorID”)
应尝试将其绑定到
VendorID
ViewBag属性perfect。非常感谢。你能推荐一些有用的资源(除了stackoverflow)来详细阅读这篇文章吗。找到这个问题的答案似乎比应该的要困难得多,但到目前为止我读到的文章和pluralsight内容根本没有涉及到这个问题。我想我永远不会再说这一点,但是ASP.net网站是MVC教程的一个很好的资源。特别是:这与SelectList构造函数一起工作。但是,一旦删除,将引发异常:无法将类型为“WhereSelectListIterator`2[Model.Vendor,System.Web.Mvc.SelectListItem]”的对象强制转换为类型为“System.Web.Mvc.SelectList”。有什么想法或者我应该让构造函数留在原地吗?只需删除视图中
SelectList
的强制转换:
@Html.DropDownList(“VendorID”)
应尝试将其绑定到
VendorID
ViewBag属性perfect。非常感谢。你能推荐一些有用的资源(除了stackoverflow)来详细阅读这篇文章吗。找到这个问题的答案似乎比应该的要困难得多,但到目前为止我读到的文章和pluralsight内容根本没有涉及到这个问题。我想我永远不会再说这一点,但是ASP.net网站是MVC教程的一个很好的资源。具体而言: