【问题标题】:How to do conditional markup in shared view (_Layout.cshtml)如何在共享视图中进行条件标记 (_Layout.cshtml)
【发布时间】:2014-09-16 10:24:06
【问题描述】:

我有一个纯 CSS 下拉菜单,我将它放在共享视图中,这样无论用户导航到菜单的哪个位置都可用。我想根据用户角色确定菜单项的可见性。像这样的东西(只是剃刀的碎片):

<ul>
@if(userRole==1||userRole==2)
   <li><a href="#">Submenu1</a></li>

但我不知道该怎么做:

1.我无权访问 ViewBag,否则我可以在 ViewBag 中设置用户角色并阅读它

  1. 我无法将共享视图强输入到某些模型。

你有什么建议?

编辑:实际上您可以设置和访问 ViewBag。解决问题。

【问题讨论】:

  • 为什么你有“无法访问ViewBag”
  • 因为我在动作方法中设置了 ViewBag。因为我不能单独渲染共享视图,所以我认为我无法访问它。
  • 是的,@StephenMuecke,它确实有效。我应该在发布问题之前检查一下。谢谢你。
  • 没有理由不能在您的操作方法中设置 `ViewBag.User=SomeValue。您甚至可以创建一个操作过滤器,将此值添加到所有视图

标签: asp.net-mvc razor master-pages


【解决方案1】:

您可以使用User 对象:

<ul>
   @if(User.IsInRole("firstRole") || User.IsInRole("secondRole"))
   {
       <li><a href="#">Submenu1</a></li>
    }
...
</ul>

当然,此解决方案要求您使用RoleProvider

【讨论】:

    【解决方案2】:

    对于简单的解决方案和多次使用,你可以试试这个

    1) Create One BaseViewModel Class
    2) put userRole property in that class (you can set this property where you want,you can set value in session and get..etc..etc..)
    3) inherit BaseViewModel in required Model(may be one or more)
    4) Use BaseViewModel in shared views
    

    【讨论】:

      猜你喜欢
      • 2016-12-15
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      相关资源
      最近更新 更多