我正在尝试在我的视图中填充下拉列表。任何帮助是极大的赞赏。感谢。
错误:
无法将类型'System.Int32'强制转换为'System.Object'。
LINQ to Entities仅支持转换实体数据模型基元类型。
控制器:
ViewBag.category = (from c in new IntraEntities().CategoryItems
select new SelectListItem() {Text=c.Name, Value=""+c.ID }).ToList<SelectListItem>();
查看:
Category:<br />@Html.DropDownList("category", (List<SelectListItem>)ViewBag.category)
答案 0 :(得分:20)
这个怎么样:
ViewBag.category =
from c in new IntraEntities().CategoryItems.ToList()
select new SelectListItem
{
Text = c.Name,
Value = c.ID.ToString()
};
以及如何使用强类型视图模型而不是ViewBag的一些弱类型的废话(这是我称之为的方式)?
像这样:
public class CategoryViewModel
{
public string CategoryId { get; set; }
public IEnumerable<SelectListItem> Categories { get; set; }
}
然后:
public ActionResult Foo()
{
var model = new CategoryViewModel
{
Categories =
from c in new IntraEntities().CategoryItems.ToList()
select new SelectListItem
{
Text = c.Name,
Value = c.ID.ToString()
}
};
return View(model);
}
最后在你的强类型视图中:
@model CategoryViewModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(x => x.CategoryId, Model.Categories)
<button type="submit">OK</button>
}
好多了,你不觉得吗?
答案 1 :(得分:5)
您可以在转换之前将查询转换为.AsEnumerable()以强制它使用Linq to Objects进行转换,但最好使用System.Data.Objects.SqlClient.SqlFunctions中提供的SQL兼容函数。像这样:
(from c in new IntraEntities().CategoryItems
select new SelectListItem() {
Text = c.Name,
Value = SqlFunctions.StringConvert((double)c.ID).TrimStart()
})
答案 2 :(得分:0)
ViewBag.category = (from c in new IntraEntities().CategoryItems
select new SelectListItem {Text=c.Name, Value=c.ID.ToString()})
.ToList<SelectListItem>();
答案 3 :(得分:0)
错误说,你试图用整数值连接字符串。在linq查询中不可能。 要将int转换为字符串,您可以使用
SqlFunctions.StringConvert((decimal?)intProperty)
答案 4 :(得分:0)
您可以使用SQL函数进行如下转换:
ViewBag.category = (from c in new IntraEntities().CategoryItems
select new SelectListItem() {
Text=c.Name,
Value=SqlFunctions.StringConvert((double) c.ID) }).ToList<SelectListItem>();
但不要忘记在文件顶部包含此命名空间:
使用System.Data.Objects.SqlClient;
答案 5 :(得分:0)
是的,你正试图&#34;用整数值连接字符串。在linq查询中不可能&#34;就像Nalan M所说的那样。确保它是您尝试获取的数据库中的列。对我来说就是这样。我指的是错误的专栏。我打电话给这个班级是因为显然有人为这个房产做了一个班级。如果您在visual studio中工作,则可以检查数据库并查看您正在呼叫的内容。这样你就可以回答这个问题:&#34;我想要的列在哪里?&#34;在数据库中。