2015-06-17 190 views
0

我试图绑定剑道Grid.but它显示我以下错误剑道UI网格结合

传递到词典中的模型项的类型为“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

请试试这个,

您的看法:

@(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(); 
} 
0

您接受到你的观点,并与网格结合的类型,是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类型< KendoApp.Models.ProductModels>将由您的观点被接受。