2

選択した日付に基づいてテーブルからテレリック グリッドを作成しようとしています。

エラー メッセージが表示されます。

System.InvalidOperationException: Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property

クライアント イベントで Telerik グリッドを設定する他の方法はありますか?

見る:

        <%= Html.Telerik().DatePicker().Min("01/01/2011")
            .Name("Date")
            .ClientEvents(e => e.OnChange("Date_onChange"))
         %>       

    <div>
    <%= Html.Telerik().Grid<DataAccess.Entity.Dto.ReportData>()
            .Name("tblGrid")
            .DataBinding(databinding => databinding.Ajax()
            .Select("MasterDataGrid", "Report"))
            .Columns(col =>
                {
                    col.Bound(f => f.ID).Title("ID Number");
                    col.Bound(f => f.Date).Title("Date");
                })
                .Filterable(filter => filter.Enabled(true))
                .Pageable(page => page.PageSize(200))
                .Sortable(sort => sort.Enabled(true))                    
    %>
    </div>

JavaScript:

function Date_onChange() {

    var link = '/Report/DataGrid';
    var Date = $("#Date").val().toString();
    $.ajax({
        type: 'POST',
        url: link,
        data: { date: Date },
        dataType: 'json',
        success: function (result) {
            $("#tblGrid").data("tGrid").dataBind(result.data);
        },
        error: function (result) {
            $("#ErrorMessage").text(result.message);
        }
    });

};

コントローラ:

    [HttpPost]
    [GridAction]
    public ActionResult DataGrid(DateTime date)
    {
       var model = context.GetReportData_tblData(date);
        return View(new GridModel { Data = model });
    }
4

2 に答える 2

2

デフォルトの JavaScriptSerializer.MaxJsonLength を増やすことができます。この回答をご覧ください:https://stackoverflow.com/a/7207539/443379

この後、フィルタリング、ページング...機能は機能しなくなります。ただし、必要なのは CustomBinding を使用することだけです(@howchengの回答に触発されました):

[GridAction(EnableCustomBinding=true)]
public ActionResult DataGrid(GridCommand command, DateTime date)
{
   var data = context.GetReportData_tblData(date)
     .ToGridModel(command.Page, command.PageSize, command.SortDescriptors, command.FilterDescriptors, command.GroupDescriptors);

   var serializer = new JavaScriptSerializer();
   var result = new ContentResult();
   serializer.MaxJsonLength = Int32.MaxValue; // overriding the default max length
   result.Content = serializer.Serialize(data);
   result.ContentType = "application/json";
   return result;
}

これは、クライアント操作モードでも機能します。これをクラスにリファクタリングできます: http://macaalay.com/2011/09/27/large-json-result-for-teleriks-mvc-grid/

于 2014-05-15T11:10:21.307 に答える