首页 > 解决方案 > 将数组内容作为 Viewbag 项获取的正确方法

问题描述

我决定为此发布一个不同的问题。这个问题与另一个帖子有关。 stackoverflow.com/questions/60141639/

我昨天发了这个。我在项目中找到了一个可以很容易实现我想要的区域,我只需要正确的方法来实现它..

我有一个 BaseController,仪表板中的所有控制器也都相关。在这我有一个

 protected override void OnActionExecuting(ActionExecutingContext context)

在这个我抓住了几个东西 UserId、RoleId 等。它还有一行代码返回一个对象/权限数组。

 var menuaccess = (MenuOfRole[])global;

MenuOfRole 是这样的:

private class MenuOfRole
{
    public string MenuURL { get; set; }
    public string RoleId { get; set; }
    public string UserId { get; set; }
    public bool IsAdd { get; set; }
    public bool IsCreate { get; set; }
    public bool IsRead { get; set; }
    public bool IsUpdate { get; set; }
    public bool IsDelete { get; set; }
}

我只对布尔值感兴趣,因为我试图在我的视图上隐藏仅显示用户是否也可以访问的按钮。

所以我试着像这样使用它:

ViewBag.Menu = menuaccess; 

然后在我看来,我做了一个 if 语句:

@if (ViewBag.Menu.IsUpdate == true)

但是它说系统数组没有 IsUpdate。放置断点并查看本地菜单时,MenuOfRole 会返回列表以及结果为真或假。

所以我的问题是,有没有办法可以调用它并在我看来使用它?使用 viewBag 还是其他方式?由于这已经完成了我需要的所有工作,因此我真的不需要进行会话并再次检查按钮。

在此先感谢您的帮助!

更新:这似乎适用于此。我不确定这是否是正确的方法,但它正在工作..

利用这个已经存在

var GetOrPost = context.HttpContext.Request.HttpMethod.ToString();

添加了这个:

if (GetOrPost == "GET")
{
    if (actionName == "add" || actionName == "index" || actionName == "create" || actionName == "edit" || actionName == "delete" || actionName == "multiviewindex")
    {
       ViewBag.Add = menuaccess.FirstOrDefault(i => (i.IsAdd));
       ViewBag.Read = menuaccess.FirstOrDefault(i => (i.IsRead));
       ViewBag.Create = menuaccess.FirstOrDefault(i => (i.IsCreate));
       ViewBag.Edit = menuaccess.FirstOrDefault(i => (i.IsUpdate));
       ViewBag.Delete = menuaccess.FirstOrDefault(i => (i.IsDelete));
    }
}

对此有什么想法吗?我只是想确保我正确地执行此操作并且不妨碍性能..

这就是我在按钮视图中所做的事情..

@if (ViewBag.Edit = true) { 
   @Ajax.ModalDialogActionLink("Edit", "Edit", "Edit User", "btn btn-warning btn-sm", new { UserName = item.UserName })
}

更新:这需要更多的工作.. MenuOfRoles 带回角色​​有权访问的所有内容。所以我需要一种方法来指定我在哪个。我在想在每个控制器中添加一些要检查的东西。我得考虑一下这个!

标签: c#asp.net-mvc

解决方案


推荐阅读