繁体   English   中英

如何将LINQ条件置于razor MVC项目中所有视图所使用的部分视图上?

[英]How to put LINQ condition on partial view used by all the views in razor MVC project?

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

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

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

我还尝试过对部分视图进行强类型化,以便该模型保留部门名称的值,但是当我导航到另一个强类型视图时,它不起作用。

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

如果我没弄错您的信息,而您的选项卡有点像导航而不是内容,那么这可以帮助您: 在布局视图中使用子动作

  1. 创建专用视图以使用专用视图模型进行导航。
  2. 在上方创建一个用于填充视图模型的操作(确定要显示的标签)
  3. 使用@ Html.Action从布局视图中调用上述操作

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

public class SomeMsgAttribute : FilterAttribute, IResultFilter
{
        public void OnResultExecuted(ResultExecutedContext filterContext)
        {
        }

        public void OnResultExecuting(ResultExecutingContext filterContext)
        {
            filterContext.Controller.ViewBag.Department= "Department";
        }
}

然后,您可以使用此属性装饰控制器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM