2017-07-12 31 views
0

Wenn ich in Asp.net Mvc, in Asp.net Mvc Web apiDataSourceResult in asp.net Kern

public DataSourceResult Get(HttpRequestMessage requestMessage) 
     { 
      var request = JsonConvert.DeserializeObject<DataSourceRequest>(
       requestMessage.RequestUri.ParseQueryString().GetKey(0) 
      ); 
      WebApplicationDbContext db = new WebApplicationDbContext(); 
      var list = db.Product.ToList(); 
      return list.AsQueryable() 
         .ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter); 
     } 

Und jetzt arbeitet mit Asp.net Core wenn ich war dieser Code, tut für Paging-Daten verwenden KendoUi .this Code verwenden es funktionierte nicht Arbeit. in der Fehlerliste zeigen mir dieser Fehler

‚Uri‘ keine Definition für ‚ParseQueryString‘ enthält und keine Erweiterungsmethode ‚ParseQueryString‘ ein erstes Argument vom Typ ‚Uri‘ Annahme gefunden werden konnte (Es fehlen eine using-Direktive oder eine Baugruppe Referenz?)

Wie kann ich diesen Code in Asp.net Core verwenden?

Antwort

1

zuerst die HttpRequestMessage requestMessage Parameter entfernen. Dann entfernen Sie den requestMessage.RequestUri.ParseQueryString().GetKey(0) Teil und ersetzen Sie es mit:

var rawQueryString = this.HttpContext.Request.QueryString.ToString(); 
// PM> Install-Package Microsoft.AspNetCore.WebUtilities 
var rawQueryStringKeyValue = QueryHelpers.ParseQuery(rawQueryString).FirstOrDefault(); 
var dataString = Uri.UnescapeDataString(rawQueryStringKeyValue.Key); // this is your received JSON data from Kendo UI 
+0

Vielen Dank für Ihre [https://github.com/VahidN/KendoUI.Core.Samples] –

0

Ich bin mir nicht sicher, warum Sie die Anfrage deserialisieren müssen. Ich übergebe normalerweise request zu ToDataSourceResult Erweiterungsmethode.

For example,

public JsonResult Get([DataSourceRequest] DataSourceRequest request) 
{ 
    var db = new WebApplicationDbContext(); 
    return db.Product.ToDataSourceResult(request); 
} 
+0

Ich benutze diesen Code aber Kendo Paging funktioniert nicht –

+0

Könnten Sie die Ansicht anzeigen? – Win

0

Danke VahidN
Dieses Projekt mir viel
KendoUI.Core.Samples

Im diesen Code verwenden in Controller

geholfen hat
public DataSourceResult GetProducts() 
     { 
      var dataString = this.HttpContext.GetJsonDataFromQueryString(); 
      var request = JsonConvert.DeserializeObject<DataSourceRequest>(dataString); 

      var list = ProductDataSource.LatestProducts; 
      return list.AsQueryable() 
         .ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter); 
     } 


Und verwenden Sie diesen Code in chstml

@{ 
    ViewData["Title"] = "Home Page"; 
} 

<!--Right to left grid--> 
<div class="k-rtl"> 
    <div id="report-grid"></div> 
</div> 

@section Scripts 
{ 
    <script type="text/javascript"> 
     $(function() { 
      var productsDataSource = new kendo.data.DataSource({ 
       transport: { 
        read: { 
         url: "@Url.Action("GetProducts", "Sample03")", 
         dataType: "json", 
         contentType: 'application/json; charset=utf-8', 
         type: 'GET' 
        }, 
        parameterMap: function (options) { 
         return kendo.stringify(options); 
        } 
       }, 
       schema: { 
        data: "data", 
        total: "total", 
        model: { 
         fields: { 
          "id": { type: "number" }, //Determine the field for dynamic search 
          "name": { type: "string" }, 
          "isAvailable": { type: "boolean" }, 
          "price": { type: "number" } 
         } 
        } 
       }, 
       error: function (e) { 
        alert(e.errorThrown); 
       }, 
       pageSize: 10, 
       sort: { field: "id", dir: "desc" }, 
       serverPaging: true, 
       serverFiltering: true, 
       serverSorting: true 
      }); 

      $("#report-grid").kendoGrid({ 
       dataSource: productsDataSource, 
       autoBind: true, 
       scrollable: false, 
       pageable: true, 
       sortable: true, 
       filterable: true, 
       reorderable: true, 
       columnMenu: true, 
       columns: [ 
        { field: "id", title: "RowNumber", width: "130px" }, 
        { field: "name", title: "ProductName" }, 
        { 
         field: "isAvailable", title: "Available", 
         template: '<input type="checkbox" #= isAvailable ? checked="checked" : "" # disabled="disabled" ></input>' 
        }, 
        { field: "price", title: "Price", format: "{0:c}" } 
       ] 
      }); 
     }); 
    </script> 
}