我试图绑定Kendo Grid。但它显示我错误
传递到字典中的模型项的类型为'System.Data.Entity.DbSet
1[KendoApp.Product]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [KendoApp.Models.ProductModels]'。
我的观点
@model IEnumerable<KendoApp.Models.ProductModels>
@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(p => p.ProductID);
columns.Bound(p => p.ProductName);
columns.Bound(p => p.UnitPrice);
columns.Bound(p => p.UnitsInStock);
}).Pageable()
)
我的控制器
public ActionResult KendoGrid()
{
//IEnumerable<Product> products = new northwindEntities().Products;
var products = new northwindEntities().Products;
ViewBag.Products = products;
return View(products);
产品型号
public class ProductModels
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public Nullable<int> SupplierID { get; set; }
public Nullable<int> CategoryID { get; set; }
public string QuantityPerUnit { get; set; }
public Nullable<decimal> UnitPrice { get; set; }
public Nullable<short> UnitsInStock { get; set; }
public Nullable<short> UnitsOnOrder { get; set; }
public Nullable<short> ReorderLevel { get; set; }
public bool Discontinued { get; set; }
}
}
错误是什么?如何解决这个问题?
答案 0 :(得分:2)
请试试这个,
您的观点:
@(Html.Kendo().Grid<KendoApp.Models.ProductModels>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.ProductID);
columns.Bound(p => p.ProductName);
columns.Bound(p => p.UnitPrice);
columns.Bound(p => p.UnitsInStock);
})
.Pageable()
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("ProductsRead", "YourControllerName"))
)
)
您的控制器操作:
public JsonResult ProductsRead([DataSourceRequest] DataSourceRequest request)
{
var products = new northwindEntities().Products
.Select(p => new ProductModels {
ProductID = p.ProductID,
ProductName = p.ProductName,
UnitPrice = p.UnitPrice,
UnitsInStock = p.UnitInStock
})
.AsQueryable();
return Json(products.ToDataSourceResult(request));
}
public ActionResult KendoGrid()
{
return View();
}
答案 1 :(得分:0)
您在视图中接受的类型以及与Grid绑定的类型是KendoApp.Models.ProductModels的集合。您从控制器传递的是KendoApp.Product类型的实体的集合。它们不被认为是相同的类型(即使这些类中的所有属性都是),这就是你得到错误的原因。
您需要做的是将KendoApp.Product实体转换为控制器中ProductModels类的新IEnumerable集合。类似的东西:
var products = new northwindEntities().Products.Select
(x => new KendoApp.Models.ProductModels
{
ProductID = x.ProductID,
ProductName = x.ProductName,
...
Discontinued = x.Discontinued
}
).ToList();
var产品现在是IEnumerable类型&lt; KendoApp.Models.ProductModels&gt;这将被你的观点所接受。