簡體   English   中英

Kendo UI網格綁定

[英]Kendo UI Grid bind

我試圖綁定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 1[KendoApp.Product]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable ]”。

我的觀點

@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; }
}
    }

有什么錯誤? 如何解決?

請嘗試一下

您的看法:

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

KendoApp.Models.ProductModels的集合是您接受到視圖中並與Grid綁定的類型。 您從控制器傳遞的是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>,您的視圖將接受該產品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM