【问题标题】:Getting error message e.slice is not a function while setting data source to kendo grid将数据源设置为剑道网格时,获取错误消息 e.slice 不是函数
【发布时间】:2016-04-28 04:00:38
【问题描述】:

我正在尝试获取数据并使用 ajax 将该数据设置为剑道网格的数据源。

我正在从控制器正确获取数据。但是当我尝试将数据源设置为剑道网格时,它会显示以下错误:

未捕获的类型错误:e.slice 不是函数

$(function () {
        loadCstDetails();
    });

function loadCstDetails() {

        var statemenetInquiryParameter = {};

        statemenetInquiryParameter.isPrintZero = true;
        statemenetInquiryParameter.isPrintPayments = true;
        statemenetInquiryParameter.isPrintAdjust = true;
        statemenetInquiryParameter.cst_stmt_from = new Date("April 01, 2016");
        statemenetInquiryParameter.cst_stmt_to = new Date("April 12, 2016");
        statemenetInquiryParameter.customerCode = 007;

        $.ajax({
            type: 'POST',
            data: JSON.stringify({ statemenetInquiryParameter: statemenetInquiryParameter }),
            contentType: 'application/json;',
            dataType: 'json',
            url: '@Url.Action("LoadCustomerStatementEnquiryDetails", "Stage")',
            success: function (result) {
                $('#gridCustomerCstTranDetailsManual').data('kendoGrid').dataSource.data(result);
            }
        });
    }
<div class="row" style="margin-top: 5px;">
                    <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
                        @(Html.Kendo().Grid<ServicePROWeb.ServiceProWCFService.CstTran>()
                            .Name("gridCustomerCstTranDetailsManual")
                            .Columns(columns =>
                            {
                                columns.Bound(p => p.cst_inv_date).Title("Invoice Date").HtmlAttributes(new { @style = "text-align: right;" }).Format(Session["DisplayFormat_GridDate"].ToString()).Width(80);
                                columns.Bound(p => p.cst_type).Title("Type").Width(80);
                                columns.Bound(p => p.cst_ih_invno).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Invoice Number").Width(80);
                                columns.Bound(p => p.cst_dr_amount).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Debit").Width(80);
                                columns.Bound(p => p.cst_cr_amount).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Credit").Width(80);
                                columns.Bound(p => p.cst_dr_balance).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Balance").Width(80);
                            })
                            .Selectable()
                            .Sortable()
                            .Scrollable()
                            .Resizable(resize => resize.Columns(true))
                            .HtmlAttributes(new { style = "cursor:pointer;height:auto;width:auto;margin-top: 0px;" })
                            .DataSource(dataSource => dataSource.Ajax())
                        )
                    </div>
                </div>
public class StatemenetInquiryParameter
{
    public decimal customerCode { get; set; }
    public DateTime cst_stmt_from { get; set; }
    public DateTime cst_stmt_to { get; set; }
    public bool isPrintZero { get; set; }
    public bool isPrintPayments { get; set; }
    public bool isPrintAdjust { get; set; }
}

public JsonResult LoadCustomerStatementEnquiryDetails([DataSourceRequest]DataSourceRequest request, StatemenetInquiryParameter statemenetInquiryParameter)
    {
        List<CstTran> l = new List<CstTran>();

        for (int i = 0; i < 12; i++)
        {
            CstTran c = new CstTran();

            c.cst_inv_date = statemenetInquiryParameter.cst_stmt_from.AddDays(i);
            c.cst_type = "I";
            c.cst_ih_invno = i + 1;
            c.cst_dr_amount = i;
            c.cst_cr_amount = 0;
            c.cst_dr_balance = c.cst_dr_balance + i;

            l.Add(c);
        }

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

public class CstTran
{
    public decimal cst_cm_code { get; set; }
    public string cst_type { get; set; }
    public DateTime cst_stmt_from { get; set; }
    public int cst_ih_invno { get; set; }
    public int cst_rcpt_no { get; set; }
    public decimal cst_dr_amount { get; set; }
    public decimal cst_cr_amount { get; set; }
    public DateTime cst_inv_date { get; set; }
    public DateTime cst_stmt_to { get; set; }
    public decimal cst_dr_balance { get; set; }
    public int cst_ih_acct_per { get; set; }
    public int cst_lvl4_sequence { get; set; }
}

【问题讨论】:

    标签: kendo-ui kendo-grid kendo-asp.net-mvc


    【解决方案1】:

    此错误是由使用ToDataSourceResult() 引起的。尝试更新LoadCustomerStatementEnquiryDetails()方法如下:

    public JsonResult LoadCustomerStatementEnquiryDetails(StatemenetInquiryParameter statemenetInquiryParameter)
    {
        List<CstTran> l = new List<CstTran>();
    
        for (int i = 0; i < 12; i++)
        {
            CstTran c = new CstTran();
    
            c.cst_inv_date = statemenetInquiryParameter.cst_stmt_from.AddDays(i);
            c.cst_type = "I";
            c.cst_ih_invno = i + 1;
            c.cst_dr_amount = i;
            c.cst_cr_amount = 0;
            c.cst_dr_balance = c.cst_dr_balance + i;
    
            l.Add(c);
        }
        return Json(l, JsonRequestBehavior.AllowGet);
    }
    

    这有助于...

    【讨论】:

      【解决方案2】:

      仅通过对所提供代码的目视检查,我怀疑这里有两件事。

      首先:

      .DataSource(dataSource => dataSource.Ajax())
      

      如果您要定义“远程”数据源,那么您需要为命令提供 read 操作或将其绑定到集合(根据我的经验),这可能是导致您遇到的错误。

      除此之外,您似乎正在编写网格声明可以为您执行的代码。

      如果您希望向控制器发送一些参数,那么我建议您更改代码如下:

          .DataSource(dataSource => {
                      dataSource.Ajax()
                      .Read(read => {
                       read.Action("LoadCustomerStatementEnquiryDetails", "Stage").Data("loadCstDetails");
                                    })
      

      然后将现有的 loadCstDetails 函数更改为:

      function loadCstDetails() {
      
              var statemenetInquiryParameter = {};
      
              statemenetInquiryParameter.isPrintZero = true;
              statemenetInquiryParameter.isPrintPayments = true;
              statemenetInquiryParameter.isPrintAdjust = true;
              statemenetInquiryParameter.cst_stmt_from = new Date("April 01, 2016");
              statemenetInquiryParameter.cst_stmt_to = new Date("April 12, 2016");
              statemenetInquiryParameter.customerCode = 007;
         return {statemenetInquiryParameter: statemenetInquiryParameter};
      }
      

      这应该会像原来一样传递对象。

      希望这能为您提供一个可行的解决方案。

      【讨论】:

      • 感谢您的回答。我已经做到了,facing this。请看一看。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      相关资源
      最近更新 更多