I'm trying to use the Telerik MVC TreeView control with checkboxes in a form. This form is use to create and modify my view Model to recover the user informations (in particular categories selection).
The treeview control shows two levels.
In case of creation, the treeview control must expand all levels.
In case of modify, the treeview control must shows the checkboxes populate in database.
How retrieve the selection of treewiew control in my view model ? I would like to retrieve the selection of treeview control in controller.
Do you have a sample code to explain that ? The demo of treewiew control doesn't explain this binding type of remote data. My treeview control is not make on demand.
My form looks like this :
@model DigitalVM
@using (Html.BeginForm("saveCampaign", "Digital", FormMethod.Post))
{
@Html.AntiForgeryToken()
<!-- Champs cachés -->
@Html.HiddenFor(model => Model.ID)
<
div
class
=
"row 1"
>
<
div
class
=
"form-group col-xs-12 col-md-6 Libelle"
>
@Html.LabelFor(model => model.Libelle)
<
div
>
@(Html.Kendo().TextBoxFor(model => model.Libelle)
.HtmlAttributes(new { style = "width:100%" })
)
@Html.ValidationMessageFor(model => model.Libelle, "", new { @class = "text-danger" })
</
div
>
</
div
>
<!-- Libelle -->
<
label
>Categories</
label
>
<
div
class
=
"form-group col-xs-12 col-md-6 Diffusion"
>
@(
Html.Kendo().TreeView()
.Name("Categories")
.Checkboxes(checkboxes => checkboxes
//.Name("IsChecked")
.CheckChildren(true)
)
.BindTo(Model.ModelTree, mappings =>
{
mappings.For<
ModelTree
>(binding => binding.ItemDataBound((item, modelItem) =>
{
item.Id = modelItem.id;
item.Text = modelItem.Name;
item.Expanded = modelItem.Expanded;
item.Checked = modelItem.Checked;
})
.Children(category => category.Children));
})
.Events(ev => ev.Check("onCheck"))
)
</
div
>
</
div
>
<!-- row 1 -->
<
div
style
=
"padding-top: 2em;"
>
<
h4
>Status</
h4
>
<
p
id
=
"result"
>No nodes checked.</
p
>
</
div
>
<
div
><
span
class
=
"icon icon-lock"
> @PortailMR.Resources.Shared.Shared.RequiredFields</
span
></
div
>
<
div
>@Html.ValidationMessage("CustomError", new { @class = "text-danger" })</
div
>
<
div
class
=
"form-group gbuttons"
>
<
div
class
=
"k-edit-buttons text-right"
>
@*<
input
type
=
"submit"
value
=
"@PortailMR.Resources.Shared.Shared.Buy.ToUpper()"
title
=
"Buy"
class
=
"icon icon-shopping-basket k-button"
/>*@
@(Html.Kendo().Button()
.Name("Commander")
.Content("Liste insertion")
.Icon("icon icon-next2")
.HtmlAttributes(new { @type = "submit", @onClick = "abortEvtUnload(true)" }))
@Html.ActionLink(" " + @PortailMR.Resources.Shared.Shared.Cancel, "Index", "Digital", null, new { @class = "k-button k-button-icontext k-grid-cancel", @onClick = "abortEvtUnload(true)" })
</
div
>
</
div
>
<!-- gbuttons -->
}
My Controller looks like this :
[Authorize]
[ValidateAntiForgeryToken]
[HttpPost]
//public ActionResult SendCommand(CommandeVM currentOffre) // OK
public
ActionResult saveCampaign(DigitalVM model)
{
try
{
if
(ModelState.IsValid)
{
writeLog(MethodBase.GetCurrentMethod(),
"Start"
,
"Info"
);
// SAVE Model in DATABASE
//var connectManager = ConnectManagers.FirstOrDefault(mng => mng.Product == model.Version);
return
View(
"index"
);
}
return
View(
"_TreeView"
, model);
}
catch
(BusinessException bex)
{
SetModelError(MethodBase.GetCurrentMethod(), bex);
return
View(
"ErrorBusiness"
,
"_Layout3"
,
new
HandleErrorInfo(bex,
"Offre"
,
"Index"
));
}
My View model looks like this :
public
class
ModelTree
{
public
string
id {
get
;
set
; }
public
string
Name {
get
;
set
; }
public
bool
Checked {
get
;
set
; }
public
bool
Expanded {
get
;
set
; }
public
IList<ModelTree> Children {
get
;
set
; }
public
ModelTree Parent {
get
;
set
; }
}
public
class
DigitalVM
{
public
int
ID {
get
;
set
; }
public
String Libelle {
get
;
set
; }
public
IEnumerable<ModelTree> ModelTree {
get
;
set
; }
}
Best regards,
Steph.