MVC中的变量ViewBag名称

时间:2014-05-30 21:07:56

标签: c# asp.net-mvc asp.net-mvc-4

基本上,我正在处理一个项目,而且我不确定如何设置变量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变成一个变量,但我不知道怎么做,这是我最好的猜测,我似乎无法找到任何方式做到这一点

2 个答案:

答案 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;