2012-07-14 2 views
5

Il y a eu beaucoup de questions à ce sujet ... mais de toute façon je ne peux pas obtenir cette liaison au travail et je suis toujours obtenir des valeurs NULL dans mon modèle de vue publié. Ceci est MVC 4..NET MVC 4 ViewModel fortement typé contenant Modèle fortement typé avec EditorFor et EditorTemplate vue partielle non obligatoire

Voici le principal modèle Voir

public class RoleVM { 

[Required] 
[Display(Name = "Name of the Role")] 
public string Role {get; set;} 

public IEnumerable<RolePermission> permissions { get; set; } 

} 

Voici la classe RolePermission

public class RolePermission { 

public int id; 

public bool permission_value; 

public string name { get; set; } 

} 

Voici la méthode GET Créer dans le contrôleur

public ActionResult Create() { 

     RoleVM role_vm = new RoleVM(); 

     var allpermissions = from p 
     in permission_repo.GetPermissions() 
     select p; 

     role_vm.permissions = from p 
     in allpermissions 
     select new RolePermission 
     { name = p.name, id = p.PermissionId, permission_value = false }; 

     return View(role_vm); 
    } 

ici est le fichier Create.cshtml

@model RoleVM 
@using (Html.BeginForm("Create", "Role", 
FormMethod.Post, new { @class = "permission_form" })) 
{ 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>RoleVM</legend> 

    <div class="form-item"> 
     @Html.LabelFor(model => model.Role) 

     @Html.EditorFor(model => model.Role) 
     @Html.ValidationMessageFor(model => model.Role) 
    </div> 

    @Html.EditorFor(model => model.permissions) 

    <p> 
     <input class="submit-btn" type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

suivante Voici le fichier rolepermissions.cshtml situé dans ~/Vues/Shared/EditorTemplates

@model RolePermission 

<div class="form-item"> 
     @Html.HiddenFor(modelItem => modelItem.id) 
     @Html.LabelFor(modelItem => modelItem.permission_value, Model.name) 
     @Html.CheckBoxFor(modelItem => modelItem.permission_value) 
</div> 

Voici un exemple de l'un des éléments HTML qui est rendu à la page

<div class="form-item"> 

     <input data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." id="permissions_2__id" name="permissions[2].id" type="hidden" value="3" /> 

     <label for="permissions_2__permission_value">Role-Edit</label> 
     <input data-val="true" data-val-required="The Boolean field is required." id="permissions_2__permission_value" name="permissions[2].permission_value" 
type="checkbox" value="true" /><input name="permissions[2].permission_value" type="hidden" value="false" /> 

</div> 
Enfin

est ici la méthode POST Créer

[HttpPost] 
    public ActionResult Create(RoleVM rolevm) 
    { 

     //In here rolevm.role is populated based on the textbox input 
     //However rolevm.permissions is there with the correct 
     //number of items, but the values all are not binded 
     // id is null, name is empty, and permission_value is false 
     // regardless of which checkboxes were checked 


     return RedirectToAction("Index"); 
    } 

Toute aide sur la liaison est Sue avec le modèle posté serait vraiment génial.

Répondre

11

Ce fut un problème simple, si quelqu'un d'autre le rencontre, peut-être que cela va les aider. Je n'ai pas les propriétés de la classe déclarées comme propriétés avec get; ensemble;

public class RolePermission { 

public int id { get; set; } 

public bool permission_value { get; set; } 

public string name { get; set; } 

} 
+0

Merci beaucoup! – Evgeny

+1

Aidé moi compagnon, se demandait pourquoi mon modèle de liaison n'a pas affiché certaines valeurs sur le formulaire, puis j'ai lu et dit que je vérifierais mon viewModel et bien sûr certaines propriétés n'avaient pas d'accesseurs sur les propriétés – John

+0

Mais avez-vous trouvé pourquoi les accesseurs sont requis? Est-ce que quelque chose définit la propriété sous l'accesseur pour hydrater l'entité? – ruffin

Questions connexes