我有一个雇员网格。有一个编辑按钮,编辑模式设置为弹出窗口。在我想要编辑的实体的EditorTemplate中,有另一个网格,其中包含具有incell或内联编辑模式的Salary历史记录。
两个网格都使用Ajax数据源。问题在于内部网格绑定。将Json结果提供给ajax调用的控制器操作需要我们正在编辑的employee的ID返回适当的Salary历史记录。但是,Kendo UI ASP.NET MVC包装器会在知道我们要编辑哪个员工之前呈现编辑器的某种模板,然后在我们请求弹出窗口时编辑它。
如何在Read Ajax调用中提供Employe ID?
主网格
@(Html.Kendo().Grid<MyProject.Business.Models.EmployeDTO>().Name("EmployeGrid")
.ToolBar(toolbar => toolbar.Create())
.Columns(cols =>
{
cols.Bound(o => o.someData).Title("Some Data");
cols.Bound(o => o.moreData).Title("More Data");
cols.Command(o =>
{
o.Edit();
o.Destroy();
}).Title(" ");
})
.Editable(editor => editor
.Mode(GridEditMode.PopUp)
.Window(window => window.Draggable().Resizable().HtmlAttributes(new { @style = "width:700px;" })))
.Sortable()
.Filterable()
.Groupable()
.DataSource(datasource => datasource
.Ajax()
.Model(model => model.Id(o => o.id))
.Read(read => read.Action("GetAll", "EmployesAjax"))
.Update(update => update.Action("Update", "EmployesAjax"))
.Create(create => create.Action("Create", "EmployesAjax"))
.Destroy(destroy => destroy.Action("Destroy", "EmployesAjax"))
)
)
内部网格(在Views / Shared / EditorTemplates / EmployeDTO.cshtml中)
@Html.Kendo().Grid<MyProject.Business.Models.SalairyDTO>().Name("SalaryGrid")
.Columns(cols =>
{
cols.Bound(o => o.someInfo).Title("Some Info");
})
.DataSource(datasource => datasource
.Ajax()
.Model(model =>
{
model.Id(o => o.id);
model.Field(o => o.employe_id).DefaultValue(Model.id);
})
// NEED THE ID HERE
.Read(read => read.Action("GetByEmployeId", "SalairyAjax", new { id = "" }))
.Update(update => update.Action("Update", "SalairyAjax"))
.Create(create => create.Action("Create", "SalairyAjax"))
.Destroy(destroy => destroy.Action("Destroy", "SalairyAjax"))));
答案 0 :(得分:3)
基本上我建议你将AutoBind选项设置为内部Grid的false,并使用外部Grid的edit事件来执行读取请求并将该值作为附加参数传递。
以下是一个例子:
function onEditOfEmployeGrid(e){
$('#SalaryGrid').data().kendoGrid.dataSource.read({id:e.model.EmployeeID})
}
答案 1 :(得分:0)
您可以使用网格中的addtionaldata参数从网格中传递值。然后可以使用ViewData [“RouteID”]在网格弹出编辑器中引用(左侧)上的RouteID。我希望有帮助
.Editable(editable => editable.Mode(GridEditMode.PopUp)
.TemplateName("busStop")
.DisplayDeleteConfirmation(true)
.Window(window => window.Modal(true).Resizable().Draggable())
.AdditionalViewData(new { RouteID = Model.RouteID }))