如何将LINQ条件放在razor MVC项目中所有视图使用的局部视图上?

时间:2017-08-22 07:33:23

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

我有一个部分视图 _Layout ,所有视图都使用它,每个视图都是强类型视图。 现在我的查询是,每个登录的用户都属于一个部门,我希望在特定部门的用户登录网站时隐藏一些选项卡(从部分视图),并显示所有其他用户的所有选项卡。 我已经尝试将LINQ查询放在所有ActionResult中获取部门名称,存储在ViewBag中并将条件放在共享视图中:

      @if (ViewBag.Department == "CUSTOMER SUPPORT")
      {
          //View all the tabs
      }
      else
      {
          //Restricted tabs
      }

为此,我必须声明ViewBag,并在每个ActionResult中进行LINQ查询以隐藏/显示标签,即使用户从共享视图上显示的标签导航到不同的页面也是如此。

我还试过强制键入局部视图,以便模型保存部门名称的值,但当我导航到另一个强类型时,它不起作用图。

我可以以某种方式全局声明一个变量来存储部门的名称并调用共享视图而不是在每个ActionResult上声明吗? 或者直接在没有控制器的共享视图上获取Department的名称,比如在共享视图上使用LINQ?

2 个答案:

答案 0 :(得分:2)

如果我没有弄错你的标签就像导航而不是内容,这可以帮到你:Use of child action in layout view

  1. 使用专用视图模型创建单独的导航视图。
  2. 为上面创建一个操作,用于填充视图模型(决定显示哪些选项卡)
  3. 使用@ Html.Action
  4. 在布局视图中调用上述操作

答案 1 :(得分:1)

您可以为此创建动作过滤器。

[SomeMsg]
public class MyController: Controller
{
   public ActionResult Index()
   {
      return View();
   }
}

然后你可以用这个属性装饰你的控制器。

a = sorted(a, key=lambda x: x.modified, reverse=True)