【问题标题】:How do I manipulate a menu in the View from the controller in Asp.net MVC 5?如何从 Asp.net MVC 5 中的控制器操作视图中的菜单?
【发布时间】:2016-04-28 08:09:51
【问题描述】:

我的问题的要点是更改我网站的菜单以显示登录用户和一个注销按钮,从一开始就有一个登录按钮。 我是 MVC 的新手,可能所有这些都错了。这是我想改变的菜单,你会明白我的想法是什么。在表单中,我可以轻松地从后面的代码中访问它,并使两个菜单选项之一不可见。

<ul id="menu">
                        <li>@Html.ActionLink("Home", "Index", "Home")</li>
                        <li>@Html.ActionLink("Members", "About", "Home")</li>
                        <li>@Html.ActionLink("Schedule", "Contact", "Home")</li>
                        <li id="loginLink">@Html.ActionLink("Login", "Login", "Account")</li>
                        <li id="logoutLink">@Html.ActionLink("(" + Session["userName"].ToString() + ")" + "Logout", "Logout", "Account")</li>
                    </ul>

【问题讨论】:

  • 如果我的解决方案不适合您,请告诉我...

标签: kendo-ui asp.net-mvc-5 kendo-asp.net-mvc


【解决方案1】:

为什么要从控制器进行视图操作?我相信 View 特定的逻辑应该位于 View 本身。

如果您已经对用户进行了身份验证,并设置了身份验证 cookie,您可以在视图中执行以下操作:

<ul id="menu">
  <li>@Html.ActionLink("Home", "Index", "Home")</li>
  <li>@Html.ActionLink("Members", "About", "Home")</li>
  <li>@Html.ActionLink("Schedule", "Contact", "Home")</li>
  @if (User.Identity.IsAuthenticated)
  {
      <li id="LogoutLink">@Html.ActionLink(User.Identity.Name + "Log Out", "Logout", "Account")</li>
  }
  else
  {
      <li id="loginLink">@Html.ActionLink("Login", "Login", "Account")</li>
  }
</ul>

在不确切知道您如何验证您的用户的情况下,我无法确定该解决方案是否适合您的需求。

如果用户已通过身份验证,此示例将返回 LogoutLink 列表项,否则,如果用户未通过身份验证,它将返回 LoginLink 列表项。

如果您有兴趣使用 ASP.NET 身份库进行身份验证,here 是一个包含一些精彩示例的博客,这对我有很大帮助。

【讨论】:

  • 嗯,我没有使用过 User.Identity。我不知道如何实际设置它,我使用 Session 变量代替,是 MVC 中推荐的 Identity 吗?
  • 好吧,如果你设置了cookie,你就不需要在会话中存储这些信息,我认为这是一个不好的做法。您目前如何验证您的用户?
  • 如果您有兴趣,我已经更新了我的答案,包括以下关于使用 ASP.Net 身份库的链接。 benfoster.io/blog/aspnet-identity-stripped-bare-mvc-part-1
  • 我只是将数据库中存储的密码与登录屏幕中提供的密码相匹配,散列。
  • 谢谢,我会读一读,我想从一开始就实现 Identity。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
相关资源
最近更新 更多