Frage

Ich verwende mvc4.Auf einer meiner Seiten gibt es Kendo Grid.Ich möchte 5 Zeilen pro Seite anzeigen.Ich habe jedoch kein Problem damit, es mit reinem Javascript zu tun, wenn ich den MVC-Helfer verwende.Ich habe mich verlaufen und konnte online keine Proben finden.

Hier ist mein Javascript-Code.

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

Wenn ich jetzt den MVC-Helfer verwende

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

Aktualisieren:

Aktionscode hinzufügen.

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

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

GetAll-Methode in der Serviceschicht:

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

Wenn ich jetzt die App starte, erhalte ich folgende Fehlermeldung:

„LINQ to Entities erkennt die Methode ‚System.String ToString()‘ nicht und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.“}

In der GetAll-Methode kommentiere ich „ToList()“ aus.Wenn ich ToList verwende, funktioniert alles.aber ich werde alle Zeilen zurückfragen, statt nur die Zeilen, die ich für diese Seite benötigt habe.

War es hilfreich?

Lösung

Sie können das einstellen PageSize im Inneren DataSource-Methode.Sie benötigen also etwas wie:

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

Weitere Informationen finden Sie im KendoUI Grid Dokumentation zu Asp.NET MVC-Wrappern.

Andere Tipps

Wenn du bist nicht Verwenden Sie die ASP.NET MVC-Wrapper von Kendo und verwenden Sie die Kendo-JavaScript-Objekte direkt Und Wenn Sie versuchen, serverseitiges Paging durchzuführen, müssen Sie Ihre Datenquelle wie folgt erstellen:

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

Und Ihre Read-Controller-Methode sieht in etwa so aus:

    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 Und serverPaging sind wichtig, um sicherzustellen, dass Paging und Sortierung serverseitig erfolgen. type muss Sei aspnetmvc-ajax, andernfalls werden die Abfragedaten nicht vom Modellbinder erkannt, der durch das Attribut [DataSourceRequest] in der Read-Methode angegeben wurde.Sie können dieses Attribut nicht weglassen, es sei denn, Sie möchten Ihren eigenen benutzerdefinierten Modelbinder schreiben, um die von der Kendo-DataSource gesendeten Abfragedaten zu analysieren, die nicht den Modelbinding-Konventionen entsprechen, die vom DefaultModelBinder in ASP.NET MVC verwendet werden.

Die andere Antwort funktioniert, wenn Sie Kendo UI für ASP.NET MVC verwenden.Wenn Sie nicht, müssen Sie die Paging selbst umsetzen.Die Kendo DataSource sendet Pagesze und aktuelle Seite bei der Anforderung.Sie können das verwenden, um die Paging zu machen.Es sendet auch "Nehmen" und "Überspringen", was die Dinge noch einfacher macht (Hinweis Linq).

Der Fehler "Linq to Entitäten erkennt die Methode 'System.String TOTRING ()' -Methode nicht, und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.} ist selbsterklärend, um dies zu gatieren, sollten Sie etwas wie

tun generasacodicetagpre.

Verwenden von Aslenumerable bringt alle Datensätze aus dem DB mit, so am besten nach jeder Filterung

generasacodicetagpre.

eher dann Produkte.Esenumerable.wo (x=> x.Active= true)

Laden Sie Kendo-Beispiele herunter, entpacken Sie sie und folgen Sie ihnen<your directory>\Kendo UI für ASP.NET MVC Q1 2013\wrappers\aspnetmvc\Examples\Areas\razor\Views\web\grid\für den View Index und<your directory>\Kendo UI für ASP.NET MVC Q1 2013\wrappers\aspnetmvc\Examples\Controllersfür IndexController

Aus Ihrer Ansicht nach möchten Sie auch .Serveroperation (true) als bellow, um Fehler während der Serialisierung oder Deserialisierung mit dem JSON JavaScriptSerializer zu vermeiden.Die Länge der Zeichenfolge überschreitet den für die Eigenschaft „maxJsonLength“ festgelegten Wert.Wenn Sie große Datenmengen abrufen müssen

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

Auch im Controller in ActionResult Products_Read berücksichtigen

  DataSourceResult result = GetProducts().ToDataSourceResult(request,  o => new { Id = o.Id, ... } );
  return Json(result , JsonRequestBehavior.AllowGet);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top