我目前正在使用控制器中的[授权]属性来限制视图仅在网站用户登录时才可见。
但是,您如何仅限制视图的一部分?例如。像这样......?
<% if(SomeoneIsLoggedIn) { %>
<div id="protectedContent">...</div>
<% } %>
登录成功时调用此方法:
public static void CreateLoginCookie(User u)
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(u.Id.ToString(), true, 9*60);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Expires = DateTime.Now.AddHours(9) };
HttpContext.Current.Response.Cookies.Add(cookie);
}
(9小时似乎不起作用,代码可能有缺陷,但它正在运行 - 它让人们登录)
提前致谢。
答案 0 :(得分:2)
您可以使用以下方法检查用户是否已登录:
System.Web.HttpContext.Current.User.Identity.IsAuthenticated;
然后,如果用户已登录,您可以将其添加到ViewData:
ViewData["UserStatus"] = System.Web.HttpContext.Current.User.Identity.IsAuthenticated;
然后在您的观点中,您可以这样做:
<% if((bool)ViewData["UserStatus"]) { %>
Content only for logged in users
<% } %>
答案 1 :(得分:0)
在您的ViewModel中添加一个bool:
public bool ShowProtectedSection {get; set;}
然后根据您的业务规则在控制器中填充(如果您使用ASP.net成员资格,您可以使用角色,或者如果您使用自己的逻辑,那么只需使用它来查明用户是否有权访问)。
将支票添加到视图:
<% if(Model.ShowProtectedSection) { %>
<div id="protectedContent">...</div>
<% } %>