Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取数组内容作为Viewbag项的正确方法_C#_Asp.net Mvc - Fatal编程技术网

C# 获取数组内容作为Viewbag项的正确方法

C# 获取数组内容作为Viewbag项的正确方法,c#,asp.net-mvc,C#,Asp.net Mvc,我决定为此发布一个不同的问题。这个问题与另一个帖子有关。 我昨天贴的。我在这个项目中找到了一个可以很容易地实现我想要的东西的领域,我只是需要一个合适的方法来实现它 我有一个BaseController,仪表板中的所有控制器也都与之相关。在这方面,我有一个 protected override void OnActionExecuting(ActionExecutingContext context) 在本文中,我获取了几个东西UserId、RoleId等。它还有一行代码,返回一个对象/权限

我决定为此发布一个不同的问题。这个问题与另一个帖子有关。

我昨天贴的。我在这个项目中找到了一个可以很容易地实现我想要的东西的领域,我只是需要一个合适的方法来实现它

我有一个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; }
}
我只对Bools感兴趣,因为我试图隐藏视图上的按钮,这些按钮只显示用户是否也有访问权限

所以我试着这样使用它:

ViewBag.Menu = menuaccess; 
然后在我看来,我做了一个if声明:

@if (ViewBag.Menu.IsUpdate == true)
但是它说系统阵列没有IsUpdate。 在放置断点和查看局部变量时,MenuOfRole返回列表,结果为true或false

所以我的问题是,在我看来,有没有一种方法可以称之为并使用它?用可视包或其他方式?由于这已经完成了我需要的所有工作,我真的不需要进行会话,只需要对按钮进行另一次检查

提前感谢您的帮助

更新:这似乎是为这个工作。我不确定这是否是正确的方法,但它正在发挥作用

利用已经存在的资源

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将带回角色有权访问的所有内容。所以我需要一种方法来指定我在哪一个上。我认为在每个控制器中添加一些要检查的内容。我得想想这个

MenuOfRole
对象数组指定给
ViewBag.Menu
。数组本身没有
IsUpdate
属性-只有数组中的项。您想知道数组中是否有任何项具有该属性true吗?还是全部?我需要每一个单独的。因此,如果IsUpdate为false,那么它将隐藏编辑按钮。如果IsCreate为false,则会隐藏Create按钮。依此类推。因此,您需要在某个地方循环查看
ViewBag.Menu
的内容,并检查每个项目的属性。在不知道这些项目和按钮是如何连接的情况下,无法添加更多内容。它们将通过if语句连接。处理菜单项的方式是循环,但如果IsForNavbar的菜单项为true,则也会将菜单项显示为数组。我真的不想有一个按钮数组,因为按钮有参数,要使其正常工作需要大量的工作。我不知道如何从这里提供帮助-您有一个项目集合,所以我猜对于每个按钮,您都需要在数组中找到与按钮对应的适当项目,然后检查该项目的
IsUpdate
值。没有更多关于整体视图和模型的知识,这就是我所能告诉你的。