I'm having a problem adding a child record in my hierarchical grid. It won't pass over the HeaderId from the parent in the grid.
Here's the controller action:
And here's the view.
Can anyone spot an issue, or am I trying to do something that isn't possible?
Thanks.
edited: to add attachment example.
Here's the controller action:
@(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>
And here's the view.
[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));
}
Can anyone spot an issue, or am I trying to do something that isn't possible?
Thanks.
edited: to add attachment example.