我需要将表单连接到单个模型或viewmodel,其中包含一个复选框列表。这些复选框对应于用户在数据库中拥有的权限列表。获取这些不是问题,它将它们与用户信息捆绑在一个模型中,我可以在表单上使用,并在发布回控制器方法时可用。
我试图使用MVC CheckBoxList助手,我绊倒了一些东西。
MVC CheckBoxList助手:
MvcCheckBoxList
示例代码使用:
@Html.CheckBoxListFor(x => x.PostedCities.CityIDs, // checkbox list name, 'PostedCities.CityIDs' in this case
x => x.AvailableCities, // List<City>()
x => x.Id, // City.Id
x => x.Name, // City.Name
x => x.SelectedCities) // List<City>() - should contain only cities to be selected
然而,当我开始提供最后一个参数(在上面的情况下为SelectedCities)时,它想要一个bool,而不是一个集合。
我的ViewModel:
public class UserDetailsModel
{
public string CheckBoxListName { get; set; }
public UserInfo UserDetails { get; set; }
public IList<PermissionCheckBoxInfo> AvailablePermissions { get; set; }
public IList<PermissionCheckBoxInfo> SelectedPermissions { get; set; }
public PostedPermissions PostedPermissions { get; set; }
}
public class PostedPermissions
{
public string[] PermissionIDs { get; set; }
}
助手类:
public class PermissionCheckBoxInfo
{
public string Name { get; set; }
public int Id { get; set; } // Integer value of a checkbox
public object Tags { get; set; } // Object of html tags to be applied to checkbox, e.g.: 'new { tagName = "tagValue" }'
public bool IsSelected { get; set; } // Boolean value to select a checkbox on the list
}
在我看来:
@Html.CheckBoxListFor(model=>model.PostedPermissions.PermissionIDs,
model=>model.AvailablePermissions,
x=>x.Id,
x=>x.Name,
a => ???)
几个问题:
第一个参数是复选框的名称?在示例中它是一个数组?
为什么不在ViewModel中使用字符串?
另外,我需要将与这些条件相关联的当前用户ID发送回控制器操作,我该如何包含它?