所以,我正在一个需要显示2个Kendo网格的页面上工作。网格基于相同的模型,具有相同的模式等。唯一的区别是其中一个模型属性(以及关联的网格名称和CRUD调用)的值。例如:
<div>
@(Html.Kendo().Grid<Person>()
.Name("Sales")
.Columns(columns =>
{
columns.Bound(c => c.FullName);
columns.Bound(c => c.Department);
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Sortable()
.DataSource(datasource => datasource
.Ajax()
.ServerOperation(false)
.Model(model => model.Id(u => u.PersonID))
.Create(update => update.Action("Person_Create", "Admin", new { positionTypeId = 1 }))
.Read(read => read.Action("Person_Read", "Admin"))
.Update(update => update.Action("Person_Update", "Admin"))
.Destroy(update => update.Action("Person_Destroy", "Admin"))
))
</div>
<div>
@(Html.Kendo().Grid<Person>()
.Name("IT")
.Columns(columns =>
{
columns.Bound(c => c.FullName);
columns.Bound(c => c.Department);
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Sortable()
.DataSource(datasource => datasource
.Ajax()
.ServerOperation(false)
.Model(model => model.Id(u => u.PersonID))
.Create(update => update.Action("Person_Create", "Admin", new { positionTypeId = 2 }))
.Read(read => read.Action("Person_Read", "Admin"))
.Update(update => update.Action("Person_Update", "Admin"))
.Destroy(update => update.Action("Person_Destroy", "Admin"))
))
</div>
模型将在哪里
public class Person
{
public int PersonID { get; set; }
public string Department{ get; set; }
public int PositionTypeId { get; set; }
public string FullName { get; set; }
}
因此,每个网格都有一个唯一的ID,但网格中的许多元素都具有相同的ID。显然,这并不理想。例如,如果(我现在处理的是什么)我想为Department附加一个下拉列表编辑器,
@(Html.Kendo().DropDownList()
.Name("Department")
.BindTo((System.Collections.IEnumerable)ViewData["Department"])
)
kendo将查看DropDownList中的.Name(),并将模板附加到它带有正确id的第一个元素。因此,第一个网格创建其编辑器(两次),而第二个网格仍然是标准文本框输入。
所以我想知道是否有办法避免这个问题(最好不要重新编码js中的网格)。
答案 0 :(得分:0)
如果您希望将列显示为网格内的下拉列表,则通常会使用ForeignKey
列定义而不是Bound
@(Html.Kendo().Grid<Person>()
.Name("Sales")
.Columns(columns =>
{
columns.Bound(c => c.FullName);
columns.ForeignKey(c => c.Department, (System.Collections.IEnumerable)ViewData["Department"], "NameOfValueColumn", "NameOfDisplayTextColumn");
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
})
您必须确保拥有EditorTemplates,特别是项目中的GridForeignKey
。