2017-07-12 54 views
0

当我在Asp.net Mvc是工作,寻呼数据使用Asp.net Mvc Web apiDataSourceResult在asp.net核心

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

KendoUi。这个代码利用而现在Asp.net Core工作时,我是用这个代码,它不工作。 错误列表展示给我这个错误

“URI”不包含“ParseQueryString”,没有 扩展方法“ParseQueryString”接受 型“URI”的第一个参数的定义可以发现(是否缺少使用指令或程序集 参考?)

我如何使用Asp.net Core这个代码?

回答

1

首先拆下HttpRequestMessage requestMessage参数。然后取出requestMessage.RequestUri.ParseQueryString().GetKey(0)部分,将其替换为:

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

非常感谢您的[https://github.com/VahidN/KendoUI.Core.Samples] –

0

我不确定为什么需要反序列化请求。我通常通过requestToDataSourceResult扩展方法。

For example,

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

我使用此代码,但kendo分页不起作用 –

+0

您能否显示视图? – Win

0

谢谢VahidN
该项目已帮助了我很多
KendoUI.Core.Samples

林在Controller

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


使用此代码 并使用此代码在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> 
}