【发布时间】:2015-11-02 19:46:46
【问题描述】:
我有一个将列绑定到相关表的 Kendo Grid。网格显示了一个固定的 4 级层次结构,该层次结构被展平:PK_Field、Name、Level_1、Level_2、Level_3 和 Level_4。
我使用this examble from Telerik 绑定级别列:
剑道网格:
@(Html.Kendo().Grid<MyViewModel>()
.Name("Grid")
.Columns(columns =>
{
columns.Command(command =>
{
command.Edit();
command.Destroy();
}).Width(220);
columns.Bound(t => t.Name).Width(80);
columns.Bound(t => t.CreateDate).Width(80);
columns.ForeignKey(t => t.Level1Id, (System.Collections.IEnumerable)ViewData["Level1"], "Id", "Text").Title("Level 1").EditorTemplateName("EditLevel1Id");
columns.ForeignKey(t => t.Level2Id, (System.Collections.IEnumerable)ViewData["Level2"], "Id", "Text").Title("Level 2").EditorTemplateName("EditLevel2Id");
columns.ForeignKey(t => t.Level3Id, (System.Collections.IEnumerable)ViewData["Level3"], "Id", "Text").Title("Level 3").EditorTemplateName("EditLevel3Id");
columns.ForeignKey(t => t.Level4Id, (System.Collections.IEnumerable)ViewData["Level4"], "Id", "Text").Title("Level 4").EditorTemplateName("EditLevel4Id");
columns.Bound(t => t.Username).Width(100);
})
服务器端:
private void PopulateCategories()
{
var dataContext = new SampleEntities();
var categories = dataContext.Categories
.Select(c => new CategoryViewModel {
CategoryID = c.CategoryID,
CategoryName = c.CategoryName
})
.OrderBy(e => e.CategoryName);
ViewData["Level1"] = categories;
}
Level_1 到 Level_4 列都有自己的ViewData 变量。
Level_4使用的数据量变大时,出现“字符串长度超过maxJsonLength属性设置的值”的错误。
我所有的服务器端方法都设置为使用MaxJsonLength = Int32.MaxValue,但 ViewData 变量不受此影响,因此当它们变得太大时会导致错误。
如何防止大型 ViewData 变量产生错误?
编辑
编辑模板 -
1级:
@using Kendo.Mvc.UI
@(Html.Kendo().DropDownListFor(m => m)
.AutoBind(false)
.OptionLabel("Select a value...")
.DataTextField("Text")
.DataValueField("Id")
.DataSource(dataSource =>
{
dataSource.Read(read => read.Action("GetLevel1Descriptions", "MyAdmin").Data("filter1Descriptions"))
.ServerFiltering(true);
})
.HtmlAttributes(new { id = "Level1Id" })
)
@Html.ValidationMessageFor(m => m)
2 级:
@using Kendo.Mvc.UI
@(Html.Kendo().DropDownListFor(m => m)
.AutoBind(false)
.OptionLabel("Select a value...")
.DataTextField("Text")
.DataValueField("Id")
.DataSource(dataSource =>
{
dataSource.Read(read => read.Action("GetLevel2Descriptions", "Admin").Data("filterLevel2Descriptions"))
.ServerFiltering(true);
})
.CascadeFrom("Level1Id")
.HtmlAttributes(new { id = "Level2Id" })
)
@Html.ValidationMessageFor(m => m)
Level3 和 Level4 遵循 Level2 模式
【问题讨论】:
标签: c# asp.net asp.net-mvc telerik