Domanda

Sto usando MVC4.Su una delle mie pagine, ha la griglia di Kendo.Voglio mostrare 5 righe per pagina.Non ho problemi a farlo usando puro JavaScript, tuttavia, se sto usando l'helper MVC.Mi sono perso, non ho trovato campioni online.

Ecco il mio codice JavaScript.

        <script language="javascript" type="text/javascript">

            $(document).ready(function () {
                $("#grid").kendoGrid({
                    dataSource: {
                        type: "json",
                        serverPaging: true,
                        pageSize: 5,
                        transport: { read: { url: "Products/GetAll", dataType: "json"} },
                        schema: { data: "Products", total: "TotalCount" }
                    },
                    height: 400,
                    pageable: true,
                    columns: [
                            { field: "ProductId", title: "ProductId" },
                            { field: "ProductType", title: "ProductType" },
                            { field: "Name", title: "Name" },
                            { field: "Created", title: "Created" }
                        ],
                    dataBound: function () {
                        this.expandRow(this.tbody.find("tr.k-master-row").first());
                    }
                });
            });
.

Ora se sto usando MVC Helper

            @(Html.Kendo().Grid(Model)
                .Name("Grid")  //please help me to finish the rest
.

Aggiornamento :

Aggiunta del codice di azione.

    [HttpPost]
    public ActionResult GetAll([DataSourceRequest]DataSourceRequest request, int id)
    {
        var products= ProductService.GetAll(id);

        return Json(products.ToDataSourceResult(request));
    }
.

Metodo GetAll nel livello di servizio:

    public IQueryable<Product> GetAll(int id)
    {
        var products= ProductRepository.Get(p => p.Id== id && p.IsActive == true, null, "ProductionYear")
                    .OrderBy(o => o.Name); //.ToList();

        return Product.Select(p => new ProductVM()
        {
            Name = p.Name,
            ProductionYear= p.ProductionYear.Year.ToString()
            Id = p.Id
        }).AsQueryable();
    }
.

Ora, se eseguo l'app, riceverò il seguente errore:

"LINQ alle entità non riconosce il metodo" System.String Tostring () ", e questo metodo non può essere tradotto in un'espressione del negozio."}

Nel metodo GetAll, commendo il "tolasist ()".Se utilizzo il tolasista, tutto funziona.Ma interrogaro tutte le file indietro invece solo quelle righe di cui avevo bisogno per quella pagina.

È stato utile?

Soluzione

È possibile impostare il PageSize all'interno del metodo DataSource .Quindi avrai bisogno di qualcosa del genere:

@(Html.Kendo().Grid(Model)
     .Name("Grid") 
     .DataSource(dataSource => dataSource.Ajax()
                                    .PageSize(5)
                                    .Read(c => c.Action("GetAll", "Products")
                                    .Model(s => s.Id(m => m.Id)))
     .Columns(columns =>
     {
        columns.Bound(m => m.ProductId).Title("ProductId");
        //other colums
     })
    .Events(g => g.DataBound("somefunction"))
    .Pageable(true))
.

Puoi trovare maggiori informazioni The Kendoui Grid's Documentazione in wrapper MvC ASP.NET .

Altri suggerimenti

Se sei non utilizzando gli involucri MVC ASP.NET di Kendo e stanno utilizzando gli oggetti Kendo JavaScript direttamente e si sta tentando di eseguire il paging del lato server, è necessarioCrea il tuo DataSource come segue:

var dataSource = {
    "type":"aspnetmvc-ajax",
    "serverSorting": true,
    "serverPaging": true,
    "page": 1,
    "pageSize": 8,
    "schema": {
      "data":"items",
      "total":"count",
      "errors":"errors"
    }
};
.

E il tuo metodo di lettura controller sembrerà qualcosa come:

    public ActionResult List_Read([DataSourceRequest]DataSourceRequest request) {
        try {
            var model = null /* prepare your model object here contain one page of grid data */;

            // using Json.NET here to serialize the model to string matching the
            // schema expected by the data source
            var content = JsonConvert.SerializeObject(new { count = model.Count, items = model.Items }, Formatting.None);

            return Content(content, "application/json");
        }
        catch (Exception exception) {
            // log exception if you need to

            var content = JsonConvert.SerializeObject(new { errors = exception.Message.ToString() }, Formatting.None);

            return Content(content, "application/json");
        }
    }
.

type, serverSorting e serverPaging sono importanti per assicurarsi che il paging e l'ordinamento avvengano lato server.type DEVE BE aspnetmvc-ajax, altrimenti i dati della query non saranno riconosciuti dal Binder del modello che è stato specificato dall'attributo [DataSourCerequest] nel metodo di lettura.Non è possibile omettere quell'attributo a meno che tu non si desidera scrivere il proprio Bindbinder personalizzato per analizzare i dati della query inviati da Kendo DataSource, che non si conform alle convenzioni di modellismo utilizzate da DefaultModelbinder in ASP.NET MVC.

L'altra risposta funzionerà se si utilizza Kendo UI per ASP.NET MVC.Se non è necessario implementare il paging te stesso.Il Kendo DataSource invierà pagine e una pagina corrente quando si effettua una richiesta.Puoi usarlo per fare il paging.Invia anche "Take" e "Skip" che rende le cose ancora più facili (suggerimento Linq).

L'errore "LINQ a entità non riconosce il metodo" System.String Tostring () "metodo, e questo metodo non può essere tradotto in un'espressione del negozio."} è auto esplicativo, a Gat intorno a questo, dovresti fare qualcosa come

return Product.**AsEnumerable**.Select(p => new ProductVM()
        {
            Name = p.Name,
            ProductionYear= p.ProductionYear.Year.ToString()
            Id = p.Id });
.

L'uso di Asenumerable porta tutti i record dal DB, quindi meglio da utilizzare dopo qualsiasi filtro

products.where(x => x.active = true).AsEnumerable
.

piuttosto allora prodotti.Ansenumerable.where (x=> x.active= true)

Scarica gli esempi di Kendo, quindi decomprimere e segui <your directory>\Kendo UI per ASP.NET MVC Q1 2013\wrappers\aspnetmvc\Examples\Areas\razor\Views\web\grid\ Per l'indice di vista e <your directory>\Kendo UI per ASP.NET MVC Q1 2013\wrappers\aspnetmvc\Examples\Controllers per indexcontroller

In tua vista potresti anche volere .Serveroperation (true) come muggito da evitare Errore durante la serializzazione o la deserializzazione utilizzando JSON JavaScriptSerializer.La lunghezza della stringa supera il valore impostato sulla proprietà maxjsonlength. Se hai grandi dati da recuperare

@(Html.Kendo().Grid(<yourmodel>)
    .Name("Grid")
    .Columns(columns =>
       ...
    })

        .Filterable()
        .Pageable()

        .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(8)
            .ServerOperation(true) )

            .Model(model =>
            {
                model.Id(p => p.Id);
                ...
            })
        )
    )
.

Anche nel controller in ActionResult Products_read considera

  DataSourceResult result = GetProducts().ToDataSourceResult(request,  o => new { Id = o.Id, ... } );
  return Json(result , JsonRequestBehavior.AllowGet);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top