2013-09-09 2 views
2

У меня есть сетка KendoUI, передающая изображение как часть шаблона, глядя, как это:Ошибки при сериализации или десериализации с помощью JSON JavaScriptSerializer в KendoUI

@(Html.Kendo().Grid(Model.UnitDetails) 
     .Name("grid") 
     .DataSource(ds => ds 
          .Ajax() 
          .Read(read => read.Action("Get", "FleetMonitor")) 
          .AutoSync(true) 
          .PageSize(3) 
    ) 
     .HtmlAttributes(new { style = "height:auto;" }) 
     .Columns(columns => 
      { 
       columns.Template(p => { }).ClientTemplate(" ").Width(270); 
       columns.Template(p => { }).ClientTemplate(" ").Width(250); 
       columns.Template(p => { }).ClientTemplate(" ").Width(150); 
       columns.Template(p => { }).ClientTemplate(" ").Width(550); 
       columns.Template(p => { }).ClientTemplate(" ").Width(25); 
       columns.Template(p => { }).ClientTemplate(" ").Width(100); 
      }) 
     .ClientRowTemplate(Html.Partial("_ClientRowTemplate", Model).ToHtmlString()) 
     .Pageable() 
     .Sortable()) 

Но всякий раз, когда я загрузить страницу сбои сетки со следующим исключением:

Ошибка при сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение по свойству maxJsonLength.

Итак, я гугле за него, и это привело меня к SO, который дал предложение к проблеме (Мой контроллер):

public ActionResult Get([DataSourceRequest] DataSourceRequest request, string tag) 
{ 
    UnitContract[] listOfUnitsFromService = UnitClient.GetListOfUnits(false, tag, true); 
    var cookie = Request.Cookies.Get("Company.Name.UnitTagCookie"); 

    Model = new FleetMonitorModel 
       { 
        UnitDetails = GenerateUnitDetails(listOfUnitsFromService.ToList()), 
        Tags = GetAvailableTags(), 
        Refresh = true, 
        SelectedTag = GetTagFromCookie(cookie) 
       }; 

    var jsonResult = Json(Model.UnitDetails.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
    jsonResult.MaxJsonLength = Int32.MaxValue; 

    return jsonResult; 
} 

Итак, кто-то может предоставить некоторые идеи для этого, и в возможно обходное решение? :) Надо сказать, что это работает, и делает шаблон, если изменить сетку инициализационной-часть от этого:

@(Html.Kendo().Grid(Model.UnitDetails) 
... 

Для этого:

@(Html.Kendo().Grid<UnitDetailsModel>() 

Однако это нарушает некоторые другие функции в моем сетка. Чтобы быть более конкретным; он почему-то мешает работе SignalR-js.

ответ

0

Попробуйте поместить этот параметр в web.config вашего проекта:

<configuration> 
    <system.web.extensions> 
     <scripting> 
      <webServices> 
       <jsonSerialization maxJsonLength="50000000"/> 
      </webServices> 
     </scripting> 
    </system.web.extensions> 
</configuration>