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.
Merci beaucoup! – Evgeny
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
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