2013-08-01 40 views
1

我在添加子級記錄時出現問題。它不會從網格中的父級傳遞HeaderId。當創建子記錄時,Kendo MVC Grid未將父ID傳遞給ClientID模板

任何人都可以發現一個問題,或者我想做的事情是不可能的嗎? 謝謝。

這裏的控制器動作:

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult BillDetail_Create(BillDetail billDetail, int billHeaderId) 
     { 
      if (billHeaderId == 0) 
      { 
       ModelState.AddModelError("billHeaderID", "add bill header first"); 
      } 
      if (billDetail != null && ModelState.IsValid) 
      { 
       var target = new BillDetail 
       { 
        Category = billDetail.Category, 
        Description = billDetail.Description, 
        Amount = billDetail.Amount, 
        BillHeaderId = billHeaderId, 
        BillDetailId = SessionBillDetails.Max(d => d.BillDetailId) + 1 
       }; 

       //Get next Id in sequence 

       billDetail.BillDetailId = target.BillDetailId; 

       SessionBillDetails.Add(target); 
      } 

      return Json(new[] { billDetail }.ToDataSourceResult(new DataSourceRequest(), ModelState)); 
     } 

而這裏的觀點:

@(Html.Kendo().Grid<BillHeader>() 

    .Name("BillHeaders") 
    .Columns(columns => 
    { 
     columns.Bound(h => h.BillHeaderId); 
     columns.Bound(h => h.Category); 
     columns.Bound(h => h.Description); 
     columns.Bound(h => h.Amount); 
    }) 
    .Pageable() 
    .Selectable(selectable => selectable 
      .Mode(GridSelectionMode.Multiple) 
      .Type(GridSelectionType.Row)) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .PageSize(6) 
     .Events(events => events.Error("error_handler")) 
     .Read(read => read.Action("BillHeaders_Read", "Bill")) 
    ) 
    .Events(events => events.DataBound("dataBound")) 
    .ClientDetailTemplateId("BillDetails") 

    ) 

<script id="BillDetails" type="text/kendo-tmpl"> 
    @(Html.Kendo().Grid<BillDetail>() 
      .Name("BillDetails_#=BillHeaderId#") 
      .Columns(columns => 
      { 
       columns.Bound(d => d.BillHeaderId).Width(50); 
       columns.Bound(d => d.BillDetailId).Width(70); 
       columns.Bound(d => d.Category).Width(70); 
       columns.Bound(d => d.Description).Width(150); 
       columns.Bound(d => d.Amount).Width(80); 
       columns.Command(command => 
       { 
        command.Edit(); 
        command.Destroy(); 
       }).Width(75); 
      }) 
      .DataSource(dataSource => dataSource 
       .Ajax() 
       .PageSize(10) 
       .Model(model => 
       { 
        model.Id(d => d.BillDetailId); 
        model.Field(d => d.BillDetailId).Editable(false); 
       }) 
      .Events(events => events.Error("error_handler")) 
      .Read(read => read.Action("BillDetails_Read", "Bill", new { billHeaderId = "#=BillHeaderId#" })) 
      .Update(update => update.Action("BillDetail_Update", "Bill")) 
      **.Create(create => create.Action("BillDetail_Create", "Bill", new { billHeaderId = "#=BillHeaderId#" }))** 
      .Destroy(destroy => destroy.Action("BillDetail_Destroy", "Bill"))) 

      .Pageable() 
      .ToolBar(tools => tools.Create()) 
      .ToClientTemplate() 
     ) 
</script> 

回答

5

管理的最終解決這個問題。真是令人難以置信....

我命名的參數在我的控制器(和視圖)是 「ID

所以控制器:

 public ActionResult BillDetail_Create(BillDetail billDetail, int id) 

,並查看:

 .Read(read => read.Action("BillDetails_Read", "Bill", new { id = "#=BillHeaderId#" })) 
     .Update(update => update.Action("BillDetail_Update", "Bill")) 
     .Create(create => create.Action("BillDetail_Create", "Bill", new { id = "#=BillHeaderId#" })) 
     .Destroy(destroy => destroy.Action("BillDetail_Destroy", "Bill"))) 
+0

謝謝大衛。我遇到了同樣的問題,並更改命名參數爲id解決了問題。 – ajexpress

1

爲了更好地解釋爲什麼工作:

如果BillDetail類具有名稱相同的屬性,則會發生這種情況。在這種情況下,MVC模型聯編程序將覆蓋與請求路由值一起發送的值,並將該值作爲網格模型的表單數據發送。如果是這種情況,那麼避免該問題的最簡單方法是重命名該參數。這就是重命名爲ID的原因。

相關問題