在视图中显示经过身份验证和匿名的内容
Posted
技术标签:
【中文标题】在视图中显示经过身份验证和匿名的内容【英文标题】:Display authenticated and anonymous content in a view 【发布时间】:2013-12-09 21:34:39 【问题描述】:我是网络开发的新手。
考虑用户可以登录的网站(例如 Facebook 登录)
假设我知道用户是否已登录(我正在寻找方法;) - 是否有可能在同一个视图(.cshtml)上 - 如果用户匿名,部分元素将被隐藏还是会在用户登录时显示?你知道 - 像好的属性或条件(简而言之 - 将逻辑放在同一个视图上而不是管理两个 .cshtml)
【问题讨论】:
【参考方案1】:我个人不喜欢在我的观点中使用 if 语句,因为它们很容易开始变得混乱,尤其是在您使用角色时。
为了避免这种情况,我更喜欢这样做。
创建一个 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);
像这样在我的视图中调用这个方法:
<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>
【讨论】:
以上是关于在视图中显示经过身份验证和匿名的内容的主要内容,如果未能解决你的问题,请参考以下文章
Drupal 8 Views 某些字段不显示给经过身份验证的用户