2012-11-14 83 views
3

我有一個Grid with Employes。有一個編輯按鈕和編輯模式設置爲彈出。在我想要編輯的實體的EditorTemplate中,還有另一個具有Incell或Inline編輯模式的Salary歷史的網格。Grid進入Grid Popup Editor - 在子網格中傳遞ID參數

這兩個網格都使用Ajax數據源。問題在於內部網格綁定。將Json結果提供給ajax調用的控制器操作需要我們編輯的workers的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("&nbsp;"); 
}) 
.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")) 
    ) 
) 

內蒙古電網(在查看/共享/ 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")))); 

回答

3

基本上我會建議你將AutoBind選項設置爲false並使用外部Grid的編輯事件來執行讀取請求並將該值作爲附加參數傳遞。

下面是一個例子:

function onEditOfEmployeGrid(e){ 
    $('#SalaryGrid').data().kendoGrid.dataSource.read({id:e.model.EmployeeID}) 
} 
+0

太棒了!謝謝! – Pluc

+0

@Pluc你能解決這個問題嗎?我陷入了一個類似的問題,我能夠從主網格中讀取ID到子網格中。但是,無法在我創建的「工具欄」按鈕內讀取相同的值。你能幫我嗎? – Sarah

+0

@Sarah通常你只要使用#= Id#(剃刀)。看看我的問題的日期,那時我剛剛開始使用Kendo。我不確定爲什麼我沒有使用這種語法。您不能將其用於默認設置,過濾器或任何強類型的內容,但對於路由數據我相信您可以...無論哪種方式,這就是您要在工具欄中使用的內容。如果你需要更多的幫助,隨時用樣品開始你自己的問題!這將更容易幫助:) – Pluc

0

你可以簡單地通過使用網格內addtionaldata參數電網的價值。然後可以使用ViewData [「RouteID」]在Grid Popup Editor中引用(左側)上的RouteID。我希望幫助

 .Editable(editable => editable.Mode(GridEditMode.PopUp) 
     .TemplateName("busStop") 
     .DisplayDeleteConfirmation(true) 
     .Window(window => window.Modal(true).Resizable().Draggable()) 
     .AdditionalViewData(new { RouteID = Model.RouteID }))