我正在尝试填充一个Kendo mvcGrid并且我一直收到错误已经添加了一个具有相同键的项目。
我在其他地方看到重复的模型属性是问题的最可能的来源,但我的模型中没有重复的属性。我甚至简化了所有内容,只是为了消除尽可能多的可能变量。我无法让网格加载数据。
我已经尝试过它作为Html.Partial,它最初没有加载因为一个空模型然后通过jquery加载它...我尝试过传入我的空模型,以便网格最初加载数据,然后做数据源刷新......也没有运气。基本上,只要我尝试使用填充模型向网格添加内容,我就会收到错误并且没有加载任何数据。
现在已经解决了这个问题2天并没有运气。我可能会在这里发布我的代码,也许其他人可以看到我错过了什么。
一个无法更改的变量是网格位于部分视图上,模型与其父视图不同。
在父视图中我已尝试过两次<div id ="columnkgrid">@{Html.RenderPartial("Columns", new TestFieldIssue.Models.FieldListModel());}</div>
和
<div id="columnkgrid">@Html.Partial("Columns", new TestFieldIssue.Models.FieldListModel())</div>
无论哪种方式都可以成功发布没有数据的网格。它还没有数据,因为它是通过选择下拉列表中的值来填充的。
为了不使示例过于复杂,我只是在我用来刷新网格的jquery函数中设置了一个硬编码值。
function loadgrid() {
var grid = $("#grid").data("kendoGrid");
var val = 1;
grid.dataSource.read({ table_pk: val });
grid.refresh();
}
部分中的网格代码再一次保持简单,没有任何铃声和口哨只是为了测试。
@(Html.Kendo().Grid(Model.fields)
.DataSource(data => data
.Ajax()
.Model(model => model.Id(m => m.field_pk))
.Read(r => r.Action("Columns","Home"))
)
.Name("grid")
.Columns(c =>
{
c.Bound(m => m.field_name).Title("Field Name").Width(100);
})
)
和控制器方法加载一些模拟数据
public ActionResult Columns(int? table_pk)
{
FieldListModel model;
if (table_pk == null)
{
model = GetEmptyColumns();
}
else
{
model = GetColumns();
}
return PartialView("Columns", model);
}
public FieldListModel GetColumns()
{
FieldListModel model = new FieldListModel();
model.fields = new List<FieldModel>();
model.fields.Add(new FieldModel { field_name = "field1", field_pk = 1 });
model.fields.Add(new FieldModel { field_name = "field2", field_pk = 2 });
model.fields.Add(new FieldModel { field_name = "field3", field_pk = 3 });
return model;
}
public FieldListModel GetEmptyColumns()
{
FieldListModel model = new FieldListModel();
model.fields = new List<FieldModel>();
model.fields.Add(new FieldModel { field_name = "", field_pk = 0 });
return model;
}
和一个非常简单的模型
public class FieldListModel
{
public List<FieldModel> fields { get; set; }
}
public class FieldModel
{
public int field_pk { get; set; }
public string field_name { get; set; }
}
答案 0 :(得分:1)
我做了一些更改来运行你的代码(正确版本的Kendo和JQuery)。可能是与我的机器设置有关的那些。我能够重现这个问题。
然后我更改了操作代码,并且能够看到Grid中填充的值:
public ActionResult Columns(int? table_pk, [DataSourceRequest] DataSourceRequest request)
{
FieldListModel model;
if (table_pk == null)
{
model = GetEmptyColumns();
}
else
{
model = GetColumns();
}
return Json(model.fields.ToDataSourceResult(request));
}
此更改正在接受DataSourceRequest
类型的操作方法中的其他参数。 Kendo网格在此对象中包装请求以指定排序和分页信息。网格本身使用DataSourceRequest
对象下的数据进行更新(注意在return语句中)。更多信息here。