MVC中的可变ViewBag名称

本文关键字:ViewBag 名称 MVC | 更新日期: 2023-09-27 18:06:04

基本上,我正在一个项目上工作,我不确定我如何能把一个变量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成为一个变量但我不知道怎么做,这是我最好的猜测我似乎找不到任何方法

MVC中的可变ViewBag名称

你不能这么做。不要害怕!有一个更好的方法来处理这个问题。

如果你需要一个对象的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;

也许您想在ViewBag中包含的是按名称索引的List<SelectListItem>Dictionary ?

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类,它是专门设计用于在HTML.DropDownList()中显示的SelectListItems的集合。