Hi !
I want to preselect my MultiSelect with values of my ViewModelRole.Functionalities
@(Html.Kendo().Grid<
GCM.ViewModel.ViewModelRole
>()
.Name("GridRoles")
.Columns(columns =>
{
columns.Bound(c => c.Designation);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(180);
})
.ToolBar(toolbar => {
toolbar.Create();
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.ClientDetailTemplateId("functionalityPanel")
.DataSource(dataSource => dataSource
.Ajax()
.Model(model => model.Id(p => p.Id))
.Read(read => read.Action("Roles_Read", "Role"))
.Create(create => create.Action("Roles_Create", "Role"))
.Update(update => update.Action("Roles_Update", "Role"))
.Destroy(destroy => destroy.Action("Roles_Destroy", "Role"))
)
)
<
script
type
=
"text/javascript"
>
function Save(e)
{
var roleId = e.event.target.dataset.roleId;
/*
AJAX Call to update Role.Functionalities
*/
}
</
script
>
<
script
id
=
"functionalityPanel"
type
=
"text/x-kendo-template"
>
@(Html.Kendo().MultiSelect()
.Name("Fonctionnalities_#=Id#")
.Placeholder("Choisissez les fonctionnalitées")
.AutoClose(false)
.DataValueField("Id")
.DataTextField("Code")
.Value(new List<
int
>
{ 1, 2 })
.BindTo(ViewBag.functionalities)
.ToClientTemplate()
)
<
br
/>
@(Html.Kendo().Button()
.Name("Save_#=Id#")
.Content("Save")
.HtmlAttributes(new { data_role_id="#=Id#" })
.ToClientTemplate())
</
script
>
and my controller
public class RoleController : Controller
{
private SolutecNetContext db = new SolutecNetContext();
public ActionResult Index()
{
ViewBag.functionalities = db.Functionalities.ToList();
return View();
}
public ActionResult Roles_Read([DataSourceRequest]DataSourceRequest request)
{
IQueryable<
Role
> roles = db.Roles;
DataSourceResult result = roles.ToDataSourceResult(request, role => new ViewModelRole{
Id = role.Id,
Designation = role.Designation,
FunctionalitiesIds = GetFunctionalitiesIds(role.Functionalities)
});
return Json(result);
}
private List<
int
> GetFunctionalitiesIds(ICollection<
Functionality
> functionalities)
{
List<
int
> functionalitiesIds = new List<
int
>();
foreach(Functionality f in functionalities)
{
functionalitiesIds.Add(f.Id);
}
return functionalitiesIds;
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Roles_Create([DataSourceRequest]DataSourceRequest request, ViewModelRole viewModelRole)
{
if (ModelState.IsValid)
{
var entity = new Role
{
Designation = viewModelRole.Designation
};
db.Roles.Add(entity);
db.SaveChanges();
viewModelRole.Id = entity.Id;
}
return Json(new[] { viewModelRole }.ToDataSourceResult(request, ModelState));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Roles_Update([DataSourceRequest]DataSourceRequest request, ViewModelRole viewModelRole)
{
if (ModelState.IsValid)
{
var entity = new Role
{
Id = viewModelRole.Id,
Designation = viewModelRole.Designation
};
db.Roles.Attach(entity);
db.Entry(entity).State = EntityState.Modified;
db.SaveChanges();
}
return Json(new[] { viewModelRole }.ToDataSourceResult(request, ModelState));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Roles_Destroy([DataSourceRequest]DataSourceRequest request, ViewModelRole viewModelRole)
{
if (ModelState.IsValid)
{
var entity = new Role
{
Id = viewModelRole.Id,
Designation = viewModelRole.Designation
};
db.Roles.Attach(entity);
db.Roles.Remove(entity);
db.SaveChanges();
}
return Json(new[] { viewModelRole }.ToDataSourceResult(request, ModelState));
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
and I want to do something like
.Value("#=Functionalities#")
Is it possible ? Did I miss something ?
Thank for your help !