次のように、テンプレートの一部として画像をレンダリングする 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 が機能しなくなります。