我已经实现了我自己的AccountProfile类是ASP.net MVC并且它可以工作但是现在我遇到了一个奇怪的问题。首先,我在Views / Shared / _LoginPartial.cshtml中调用AccountProfile.MyProperty。 AccountProfile.MyProperty调用Membership.GetUser()。UserName工作。现在,当我“注册”一个帐户时,在我登录后,AccountProfile.MyProperty工作并将信息呈现到html页面。
然而,当我停止运行,更改一些代码并再次启动时,Membership.GetUser()返回null,即使我仍然根据成员身份登录。
页面加载失败后,如果我导航到/ Account / Login页面,则Membership.GetUser()可以正常工作。在它工作之后,我可以导航到在开始时不起作用的索引页面,并且它可以工作。
我的问题是为什么当我的页面首次加载时,Membership.GetUser()会返回null?
感谢。
答案 0 :(得分:2)
好吧,我找到了一个关于有缺陷的Membership.GetUser()函数的工作。
HttpContext.Current.User.Identity.Name
这段代码获取登录的用户名,实际上它似乎有效。如果我有任何问题,我会在这里报告。
答案 1 :(得分:1)
请看下面的帖子,也许你有同样的问题? :
希望这有帮助
答案 2 :(得分:1)
试试这个
using Microsoft.AspNet.Identity;
var id = User.Identity.GetUserId();
答案 3 :(得分:0)
刚遇到同样的问题。
在MVC 4中,使用过滤器InitializeSimpleMembershipAttribute
初始化默认身份验证系统(从生成的项目的源代码中可以很清楚)。过滤器仅应用于AccountController
(因此,一旦您访问此控制器的登录或任何其他页面,就会初始化身份验证系统,您可以在任何需要的地方使用Membership.GetUser()
。)
对于我目前的项目,快速而肮脏的解决方案是拥有一些控制器,定义如下:
[InitializeSimpleMembership]
public abstract class DefaultController : Controller
{}
从DefaultController
派生我的应用程序的其他控制器,而不是直接从Controller派生。
此外,这种技术很适合在一个地方使用常用属性(如dbcontext变量等)。
答案 4 :(得分:0)
将[InitializeSimpleMembership]添加到Controller
示例:
using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using Bencsharp.BL.Services;
using Bencsharp.Mvc.Filters;
using Bencsharp.Mvc.Models;
namespace Bencsharp.Mvc.Controllers
{
[InitializeSimpleMembership]
public class HomeController : Controller
{
// ...
}
}