2012-07-14 79 views
5

關於這個問題一直有很多問題......但不知何故,我無法獲得這個綁定工作,我仍然在我發佈的視圖模型中獲得空值。這是MVC 4.NET MVC 4強類型ViewModel包含強類型ModelFor和EditorTemplate部分視圖不具約束

這裏是主視圖模型

public class RoleVM { 

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

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

} 

這裏是RolePermission類

public class RolePermission { 

public int id; 

public bool permission_value; 

public string name { get; set; } 

} 

這裏是GET控制器

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

這裏創建方法是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> 
} 

下一頁這裏是位於〜/瀏覽次數的rolepermissions.cshtml文件/共享/ 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> 

這裏是頁面上呈現的HTML項目之一的例子

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

最後這裏是創建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"); 
    } 

對綁定的任何幫助是與張貼的模型起訴真的很棒。

回答

11

這是一個簡單的問題,如果有人遇到它,也許這會幫助他們。我沒有將屬性聲明爲具有get屬性的類;組;

public class RolePermission { 

public int id { get; set; } 

public bool permission_value { get; set; } 

public string name { get; set; } 

} 
+0

非常感謝! – Evgeny 2012-09-13 12:52:02

+1

幫助我的隊友,一直想知道爲什麼我的模型綁定不會在窗體中張貼某些值,然後我讀這個,並說我會檢查我的viewModel,並確定某些屬性沒有訪問器的屬性 – John 2013-02-09 22:19:19

+0

但是,你是否發現爲什麼訪問器是必要的?是否設置訪問器下的屬性來爲實體提供水合物? – ruffin 2013-12-13 19:58:57