2012-03-16 55 views
5

我有一个模型,它看起来是这样的:如何在MVC 3 Razor中将模型绑定到模型的属性?

public class EditUserViewModel 
    { 
     public EditUserViewModel() 
     { 

     } 
     public EditUserDataModel User { get; set; } 
    } 

随着支持对象,看起来像这样:

public class EditUserDataModel 
{ 
    public EditUserDataModel() 
    { 
     Roles = new List<UserRoleListDataModel>(); 
    } 
    [DisplayName("First Name")] 
    public string FirstName { get; set; } 
    [DisplayName("Last Name")] 
    public string LastName { get; set; } 
    [DisplayName("Full Name")] 
    public string FullName { get { return FirstName + " " + LastName; } } 
    public List<UserRoleListDataModel> Roles { get; set; } 
} 

而且UserRoleListDataModel看起来是这样的:

public class UserRoleListDataModel 
{ 
    public Guid Id { get; set; } 
    public string RoleName { get; set; } 
    public bool UserIsInRole { get; set; } 
} 

然后,在我的Razor文件中,我使用了如下所示的全部内容:

@foreach (var role in Model.User.Roles) 
{ 
<tr> 
    <td>@role.RoleName</td> 
    <td>@Html.CheckBoxFor(x=>role.UserIsInRole)</td> 
</tr> 
} 

我遇到的问题是,当我提交表单并点击我的控制器操作时,角色列表未填充到我的新模型上。

这里是控制器上的提交操作是这样的:

public ActionResult EditUser(EditUserViewModel model) // model.User.Roles is empty. 
{ 
    // Do some stuff... 
    return RedirectToAction("UserList"); 
} 

任何人有什么建议?

+1

https://github.com/danludwig/BeginCollectionItem&http://nuget.org/packages/BeginCollectionItem – danludwig 2012-03-16 19:16:57

回答

6

试试这个在您的剃刀:

@for (int i=0;i < Model.User.Roles.Count;i++) 
{ 
@Html.Hidden("User.Roles.Index",i); 
<tr> 
    <td>@role.RoleName</td> 
    <td>@Html.CheckBox("User.Roles[" + i + "].UserIsInRole",role.UserIsInRole)</td> 
</tr> 
} 

这有点手册,但应该做的工作。

8

克里卡鲁很近,让我走上正轨。

@for (int i=0;i < Model.User.Roles.Count;i++) 
{ 
    @Html.Hidden("User.Roles.Index", i) 
    @Html.HiddenFor(x => x.User.Roles[i].RoleName) 
    <tr> 
     <td>@Html.DisplayFor(x => Model.User.Roles[i].RoleName)</td> 
     <td>@Html.CheckBoxFor(x => Model.User.Roles[i].UserIsInRole)</td> 
    </tr> 
} 
+2

1为索引属性正确使用剃刀语法。虽然克里斯应该(并接受)信贷,你的答案是正确的,应该被标记为这样。 – 2013-07-12 10:14:08

相关问题