Kendo UI Grid绑定

时间:2015-06-17 17:08:07

标签: c# asp.net asp.net-mvc

我试图绑定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; }
}
    }

错误是什么?如何解决这个问题?

2 个答案:

答案 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;这将被你的观点所接受。