【问题标题】:Creating a @Html.DropdownList for from several db columns从几个 db 列创建 @Html.DropdownList
【发布时间】:2013-09-28 03:46:07
【问题描述】:

当 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()”方法,并且该方法无法转换为存储表达式。

关于如何解决这个看似简单的任务的任何想法

谢谢大家。

杰森。

【问题讨论】:

    标签: c# asp.net linq asp.net-mvc-4 entity-framework-5


    【解决方案1】:

    您不能在 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<SelectListItem>

    【讨论】:

    • 这适用于 SelectList 构造函数。但是,一旦删除,就会引发异常:无法将“WhereSelectListIterator`2[Model.Vendor,System.Web.Mvc.SelectListItem]”类型的对象转换为“System.Web.Mvc.SelectList”类型。有什么想法还是我应该把构造函数留在原处?
    • 只需在您的视图中删除对SelectList 的演员表:@Html.DropDownList("VendorID") 应该尝试将其绑定到VendorID ViewBag 属性
    • 完美。非常感谢。您能否建议任何有用的资源(除了stackoverflow)来详细阅读这些内容。找到这个问题的答案似乎比它应该的要困难得多,但到目前为止我读到的文章和复数的东西根本没有涉及到它。
    • 不要以为我会再说一遍,但是 ASP.net 站点是 MVC 教程的绝佳资源。具体来说:DropDownList helper tutorial
    猜你喜欢
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多