Tout d'abord j'ai cherché ma question mais je n'ai rien trouvé qui m'a aidé à aller plus loin. J'essaye d'implémenter une vue qui me permet de placer des permissions pour l'utilisateur courant.ASP.NET MVC: passage d'un viewmodel complexe au contrôleur
Comme la structure de données i après l'utilisation de classe récursive où chaque PermissionTree-objet fait référence aux sous-autorisations (autorisations sont structurées hiérarchiquement dans ma demande):
public class PermissionTree
{
public Permission Node; //the permission object contains a field of type SqlHierarchyId if that is relevant
public bool HasPermission;
public IList<PermissionTree> Children;
//i cut out the constructors to keep it short ...
}
voici comment le contrôleur ressemble à:
//this is called to open the view
public ActionResult Permissions()
{
//pass the root element which contains all permission elements as children (recursion)
PermissionTree permissionTree = PopulateTree();//the fully populated permission-tree
return View(permissionTree);
}
//this is called when i submit the form
[HttpPost]
public ActionResult Permissions(PermissionTree model)
{
SetPermissions(model);
ViewData["PermissionsSaved"] = true;
return View(model);//return RedirectToAction("Index");
}
à l'aide d'une vue am fortement typé comme ceci:
@model PermissionTree
//....
@using (Html.BeginForm("Permissions", "Permission", null, FormMethod.Post, new { @class = "stdform stdform2" }))
{
<input name="save" title="save2" class="k-button" type="submit" />
<div class="treeview">
//i am using the telerik kendoUI treeview
@(Html.Kendo().TreeView()
.Name("Permissions")
.Animation(true)
.ExpandAll(true)
.Checkboxes(checkboxes => checkboxes
.CheckChildren(true)
)
.BindTo(Model, mapping => mapping
.For<PermissionTree>(binding => binding
.Children(c => c.Children)
.ItemDataBound((item, c) => {
item.Text = c.Node.PermissionName;
item.Checked = c.HasPermission;
})
)
)
)
ok, donc quand je clique sur le bouton, je veux que mon viewmodel soit envoyé à l'action du contrôleur qui est décorée avec [HttpPost]
. Mais quand je débogue l'application, le modèle reçu ne contient pas vraiment mes données (ce n'est pas nul cependant). Est-ce que quelqu'un sait comment je peux atteindre mon objectif et obtenir le modèle entier viewmodel?
meilleures salutations, r3try
Avez-vous des champs de saisie dans votre vue? – ken2k
non, je n'utilise qu'une arborescence avec des cases à cocher – r3try
Essayez de voir ce qui se passe dans la liaison de modèle: http: // stackoverflow.com/questions/4651085/best-practices-for-débogage-asp-net-mvc-binding – ngm