更新:我不能删除这个问题,因为答案已经upvoted,但它根本不是我所问的答案。我想删除这个,因为它已经有一周没有答案了,只是拖拽我的接受%。谢谢。ASP.NET MVC2母版页和身份验证
我有一个强类型的母版页包含基于目前已验证的用户的用户ID信息:
(Guid)Membership.GetUser().ProviderUserKey
每隔正常动作/视图会要求用户它正在观看之前被验证,这意味着用户的信息保证可用。
问题是,当我尝试访问用户的信息时,我只收到空引用异常。来自网站的母版页。我猜这是因为没有适用于母版页的[Authorize]属性。
我有这个错吗?是否有另一个可能的原因?
简单的例子:
我的网站的各个页面都使用继承母版页视图模型视图模型对象:
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<Models.MasterViewModel>" %>
通过身份验证的用户对象是在此基础视图模型的属性。所有页面都需要认证,因此任何不是的人都被重定向到完美无瑕的登录视图。因此,一个简单的尝试利用用户的视图中的属性是这样的:
<%= Model.UserName %>
我将摆在一个视图中,并在该网站的主视图。
当用户已经通过身份验证时,所有工作都应该如此,用户名将在页面上打印两次。但是,当身份验证票证过期或新用户出现时,该页面将不会重定向到登录名,而是会生成一个异常,它会在主视图中投诉来自<%= Model.UserName%>的空引用。
当我从主视图中删除<%= Model.UserName%>并将其保留在普通视图中时,它将按照原样重定向,而不会引发错误。
我希望这个更清楚些。
编辑:
也许有人可以提供一个更好的方式来访问身份验证的用户的母版页的信息?
编辑#2:
我会看到的已认证用户的信息在母版页被访问的任何例子......这才是真正的头象棋对我很感兴趣。
更新:
我还没有接受的答案,因为我很熟悉,我怎么能测试用户是否被认证。我很想知道为什么没有重定向到登录页面。
我在基础控制器上有一个[Authorize]属性,所有其他控制器都从其继承,并且我相信我的路由是健全的。 “其他的东西还没有完全到位,”当时,我仍然怀疑是原因 - 我找不到它。谢谢。 – asfsadf 2010-09-22 17:00:53
在违规的主页面中,添加行<%= this.ViewContext%>,然后右键单击和“断点” - >“插入断点”。然后检查ViewContext,应该给你指针哪些视图已被加载等 – 2010-09-23 06:50:19
我无法想出这救了我的生活,但我打算把它标记为“答案”,并继续前进。谢谢您的帮助。 – asfsadf 2010-09-24 05:31:19