【问题标题】:DataSourceResult in asp.net coreasp.net 核心中的 DataSourceResult
【发布时间】:2017-12-17 10:26:39
【问题描述】:

当我在Asp.net Mvc 工作时,对于分页数据使用KendoUi。此代码在Asp.net Mvc Web api 中使用

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

现在使用Asp.net Core,当我使用此代码时,它不起作用。 在错误列表中向我显示此错误

“Uri”不包含“ParseQueryString”的定义,并且没有 扩展方法“ParseQueryString”接受类型的第一个参数 可以找到“Uri”(您是否缺少 using 指令或程序集 参考?)

如何在Asp.net Core 中使用此代码?

【问题讨论】:

    标签: asp.net-mvc kendo-ui asp.net-core asp.net-core-webapi


    【解决方案1】:

    我不确定您为什么需要反序列化请求。我通常将request 传递给ToDataSourceResult 扩展方法。

    For example,

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

    【讨论】:

      【解决方案2】:

      首先去掉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
      

      【讨论】:

      【解决方案3】:

      谢谢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>
      }
      

      【讨论】:

        猜你喜欢
        • 2017-10-23
        • 2018-05-25
        • 2021-08-21
        • 2017-06-05
        • 2017-06-02
        • 2022-01-11
        • 1970-01-01
        • 2021-09-21
        相关资源
        最近更新 更多