2012-07-14 9 views
5

Było wiele pytań na ten temat ... ale jakoś nie mogę uzyskać tego wiązania do pracy i nadal jestem uzyskiwanie wartości pustych w moim opublikowanym Modelu widoku. Jest to MVC 4..NET MVC 4 Silnie napisany ViewModel zawierający Silnie wpisany model z edytoremDla i EditorTemplate częściowy widok niewiążący

Oto główne Widok Model

public class RoleVM { 

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

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

} 

Oto Klasa RolePermission

public class RolePermission { 

public int id; 

public bool permission_value; 

public string name { get; set; } 

} 

Oto GET Tworzenie metody w kontrolerze

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); 
    } 

Tutaj to plik 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> 
} 

Następny Oto plik rolepermissions.cshtml się w ~/views/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> 

Oto przykład jednego z elementów HTML, które są świadczone na stronie

<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> 

Wreszcie jest tu Tworzenie metody POST

[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"); 
    } 

Każda pomoc jest na wiązanie pozew z opublikowanym modelem byłby naprawdę świetny.

Odpowiedz

11

To był prosty problem, jeśli ktoś go spotka, może to pomoże. Nie miałem właściwości w klasie zadeklarowanej jako właściwości get; zestaw;

public class RolePermission { 

public int id { get; set; } 

public bool permission_value { get; set; } 

public string name { get; set; } 

} 
+0

Dziękuję bardzo! – Evgeny

+1

Pomógł mi kolega, zastanawiałem się, dlaczego moje powiązanie modelu nie zawierało pewnych wartości poza formularzem, przeczytałem to i powiedziałem, że sprawdzę mój viewModel i jestem pewien, że pewne właściwości nie mają żadnych akcesorów na właściwościach – John

+0

Ale czy znalazłeś dlaczego akceleratory są wymagane? Czy coś ustawia nieruchomość pod akcesorem, aby uwodnić jednostkę? – ruffin

Powiązane problemy