【问题标题】:How can I access elements in shared _Layout view from my controller (asp.net core mvc)如何从我的控制器访问共享 _Layout 视图中的元素(asp.net core mvc)
【发布时间】:2017-03-11 18:47:50
【问题描述】:

我正在编写一个应用程序,并且我已经使用 cookie 中间件实现了用户登录功能。我的共享 _Layout 视图有一个导航栏,其中包含指向“注册”、“登录”和“注销”的链接。问题是无论是否登录,导航栏上都会出现“登录”和“注销”,所以我需要能够从我的控制器访问共享视图页面中的 html 元素以隐藏登录时“登录”按钮,未登录时隐藏“注销”按钮。

【问题讨论】:

  • 为什么不通过 Viewbag 和 if else 逻辑
  • 你能演示一下吗?这很模糊。
  • 您可以设置ViewBag.IsloggedIn=true,然后在视图中使用它。或设置HttpContext.Items["LoggedIn"]=true

标签: asp.net-core-mvc


【解决方案1】:

我需要能够从我的控制器访问共享视图页面中的 html 元素

这不是你在 MVC 中做事的方式。在 MVC 中,控制器将静态类型或动态(viewbag)数据传递给视图。然后视图使用这些数据来构建它想要的任何 HTML。

第一个选项是让您的布局菜单(在 _layout 视图中)使用视图包中的几个属性,例如 IsAuthenticatedUserName。然后,您必须在每个操作上设置这些 viewbag 属性,这不是很方便。

第二个选项,在应用程序启动时注册一个全局过滤器,该过滤器将应用于您的所有控制器操作。根据身份验证状态,在每个请求上设置过滤器设置 viewbag 属性 IsAuthenticatedUserName。与第一个选项一样,您的布局将使用这些 viewbag 属性来构建菜单。更干净、更方便。

How to register a global filter in ASP.NET Core

How to set viewbag properties from a filter

【讨论】:

    【解决方案2】:

    我没有直接操作 _Layout 页面,而是创建了一个 _LoginPartial,与创建应用程序时选择“个人用户帐户身份验证”时生成的页面相同。

    _LoginPartial.cshtml:

    @if (Context.User.Identity.IsAuthenticated)
    {
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-area="" asp-controller="User" asp-action="Logout">Logout</a>
            </li>
        </ul>
    }
    else
    {
        <ul class="nav navbar-nav navbar-right">
            <li><a asp-area="" asp-controller="User" asp-action="Register">Register</a></li>
            <li><a asp-area="" asp-controller="User" asp-action="Login">Log in</a></li>
        </ul>
    }
    

    然后我在_Layout.cshtml的导航栏中渲染了局部视图:

    <nav class="navbar  navbar-fixed-top">
            <div class="container">
                <div class="collapse navbar-collapse" id="navigation-index">
                    <ul class="nav navbar-nav navbar-right">
                    @await Html.PartialAsync("_LoginPartial")
                    </ul>
                </div>
            </div>
        </nav>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2010-11-27
      • 1970-01-01
      • 2011-12-19
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多