【问题标题】:Display authenticated and anonymous content in a view在视图中显示经过身份验证和匿名的内容
【发布时间】:2013-12-09 21:34:39
【问题描述】:

我是网络开发的新手。

考虑用户可以登录的网站(例如 Facebook 登录)

假设我知道用户是否已登录(我正在寻找方法;) - 是否有可能在同一个视图(.cshtml)上 - 如果用户匿名,部分元素将被隐藏还是会在用户登录时显示?你知道 - 像好的属性或条件(简而言之 - 将逻辑放在同一个视图上而不是管理两个 .cshtml)

【问题讨论】:

    标签: asp.net asp.net-mvc view facebook-login asp.net-mvc-5


    【解决方案1】:

    我个人不喜欢在我的观点中使用 if 语句,因为它们很容易开始变得混乱,尤其是在您使用角色时。

    为了避免这种情况,我更喜欢这样做。

    1. 创建一个 html 帮助器,其中包含这样抽象出来的逻辑:

      namespace System.Web.Mvc
      {
          public static class HtmlHelperExtensions
          {
              public static MvcHtmlString UserMessage(this HtmlHelper htmlHelper)
              {
              string welcomeFormat = "Welcome, {0}";
              var isAuthenticated = htmlHelper.ViewContext.HttpContext.User.Identity.IsAuthenticated;
              var name = htmlHelper.ViewContext.HttpContext.User.Identity.Name;
              var message = isAuthenticated ? string.Format(welcomeFormat, name) : string.Format(welcomeFormat, "anonymous!");
              return new MvcHtmlString(message);
             }
         }
      }
      
    2. 像这样在我的视图中调用这个方法:

      <p>@Html.UserMessage()</p>
      

    如果您是 Web 开发新手,Helper 扩展程序的代码可能看起来有点繁琐,但您最终只需要编写一次,而用于在其他地方调用它的代码更简单且可重用。

    这是一篇关于 Html 助手的文章以获取更多信息:

    http://www.codeproject.com/Articles/649394/ASP-NET-MVC-Custom-HTML-Helpers-Csharp

    更新

    也忘了提到这种技术,它再次避免了 if 语句。

    创建两个局部视图,例如 _auth.cshtml_unauth.cshtml

    创建一个检查用户是否通过身份验证并返回相关部分的操作,即

    public ActionResult FooContent()
    {
        if (User.Identity.IsAuthenticated)
        {
            return PartialView("_auth");
        }
        else
        {
            return PartialView("_unauth");
        }
     }
    

    然后像这样在您的视图中调用该操作:

    @Url.Action("FooContent", "Contoller");
    

    这也可以用于检查角色并返回不同的部分。

    【讨论】:

    • 感谢感谢您的两个答案,并会尝试并尽快通知您。我想这里没有最佳实践吗?喜欢这里的一些网页设计模式吗?
    • 真的是个人选择,让他们都尝试一下解决方案,看看你喜欢哪个。 :)
    • 我完全忘记了答案中的更新方法。我认为这也是比 if 语句更好的做法。 :)
    • 感谢您的宝贵时间 :)
    【解决方案2】:

    是的,视图可以有逻辑。

    这是一个代码示例,根据用户是否登录,向用户显示不同的内容。

    @if (User.Identity.IsAuthenticated)
    {
        <p>Welcome, @User.Identity.Name!</p>
    }
    else
    {
        <p>Welcome, anonymous!</p>
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-06
      • 2021-09-24
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2017-04-20
      • 2012-09-10
      • 1970-01-01
      相关资源
      最近更新 更多