2013-05-20 147 views
0

車型ASP.NET MVC多個複選框

public class UserRoleViewModel 
{ 
    public UserRoleViewModel() 
    { 
     Roles = new List<RoleViewModel>(); 
    } 
    public string UserId { get; set; } 
    public List<RoleViewModel> Roles { get; set; } 
} 

public class RoleViewModel 
{ 
    public bool IsInRole { get; set; } 
    [HiddenInput(DisplayValue = false)] 
    public int RoleId { get; set; } 
    [HiddenInput(DisplayValue = true)] 
    public string RoleName { get; set; } 
} 

控制器

public ActionResult EditUserRole(string userId) 
{ 
    var user = userService.GetUser(userId); 
    var roles = userService.GetRoles(); 

    UserRoleViewModel viewModel = new UserRoleViewModel(); 
    viewModel.UserId = user.UserId; 
    //Match the roles the user is in with the list of roles 
    foreach (var role in roles) 
    { 
     viewModel.Roles.Add(new RoleViewModel 
          { 
           IsInRole = user.Roles.Any(r => r.RoleId == role.RoleId), 
           RoleId = role.RoleId, 
           RoleName = role.RoleName 
          }); 
    } 

    return View(viewModel); 
} 

[HttpPost] 
public ActionResult EditUserRole(UserRoleViewModel model) 
{ 
    List<Role> roles = model.Roles.Where(r => r.IsInRole).Select(r => new Role {RoleId = r.RoleId, RoleName = r.RoleName}).ToList(); 
    userService.AddRolesToUser(model.UserId, roles); 

    return View();    
} 

視圖(EditRole.cshtml)

@model WebUI.ViewModel.UserRoleViewModel 

@using (Html.BeginForm("EditUserRole", "Administrator")) 
{ 
    @Html.HiddenFor(x => Model.UserId) 

    @Html.EditorFor(x => Model.Roles) 

    <input type="submit" /> 
} 

和編輯模板

@model WebUI.ViewModel.RoleViewModel 

@Html.CheckBoxFor(m => m.IsInRole, new { onclick="this.form.submit();"}) 
@Html.HiddenFor(m => m.RoleId) 
@Html.LabelFor(m => m.IsInRole, Model.RoleName) 
<br /> 

重要的一行是在編輯模板(我加onclick事件):

@Html.CheckBoxFor(m => m.IsInRole, new { onclick="this.form.submit();"}) 

一切都很好,但只roleNames與空值發佈。我的意思是,我調試它,IsInRoleRoleId預計,但只有roleNames爲空。

我找不到解決方案。對此有何建議?爲什麼只有角色名張貼空...

謝謝...

回答

1

這是因爲roleName不是輸入字段。只有輸入字段被回發到服務器而不是顯示字段。

因此,您可以將角色名稱存儲在類似RoleId的隱藏字段中,並且您應該可以訪問它。

<input type="hidden" id="hdnRoleName" name="hdnRoleName" value="@Model.RoleName" /> 

而且在你的行動 你可以從Request["hdnRoleName"]訪問它或者說從的FormCollection。

+0

哦!你是對的,我無法看到它。非常感謝... –

+0

嘗試使它成爲一個輸入字段可能是一個隱藏的..你應該能夠... – PSL