基本上,我正在处理一个项目,而且我不确定如何设置变量ViewBag名称,我想这样做,因为以下所有代码都在while循环中。
List<SelectListItem> PermissionLevels = new List<SelectListItem>();
PermissionLevels.Add (new SelectListItem {//skipping this section, not relevant
ViewBag.@ContactName = PermissionLevels;
然后在视图中我有一个foreach循环:
@Html.DropDownList(_CurrentPermissions.Name)
(是的,_CurrentPermissions是它所在的正确名称。)
我在这里真正要做的是让@ContactName变成一个变量,但我不知道怎么做,这是我最好的猜测,我似乎无法找到任何方式做到这一点
答案 0 :(得分:0)
您希望在ViewBag
中添加的内容是Dictionary
List<SelectListItem>
是否按名称编入索引?
Dictionary<string, List<SelectListItem>> Permissions =
new Dictionary<string, List<SelectListItem>>();
List<SelectListItem> PermissionLevels = new List<SelectListItem>();
Permissions[ContactName] = new SelectListItem( ... ) // Repeat for each name
ViewBag.Permissions = Permissions;
然后在foreach循环内部的视图中:
@Html.DropDownList(Permissions[_CurrentPermissions.Name])
在索引到字典之前,不要忘记检查密钥是否存在。您还可以查看SelectList
类,该类是专为在SelectListItems
中显示而设计的HTML.DropDownList()
的集合。
答案 1 :(得分:0)
你不能这样做。不要害怕!有一个更好的方法来处理这个问题。
如果您需要将List
个对象返回到视图中,只需将列表存储在ViewBag
中,或将其存储为模型中的属性。
由于听起来您正在为每个用户构建一个权限列表,因此它可能看起来像这样的:
var permissionsDictionary = new Dictionary<string, List<SelectListItem>>();
foreach (var user in users) {
var listItems = new List<SelectListItem>();
listItems.Add(new SelectListItem() {
//Do your stuff!
});
permissionsDictionary.Add(user.Name, listItems);
}
model.Permissions = permissionsDictionary;