我实现了我自己的AccountProfile类是ASP.net MVC和它的作品,但现在我遇到一个奇怪的问题。 首先,我在查看/共享/ _LoginPartial.cshtml调用AccountProfile.MyProperty。 AccountProfile.MyProperty使得以Membership.GetUser()。用户名调用工作。 现在,当我“注册”为一个账户,我登录后,AccountProfile.MyProperty工程和信息呈现到HTML页面。
然而,当我停止运行,改变了一些代码,并再次启动,Membership.GetUser()返回null,即使我仍然登录根据会员。
页面加载失败,如果我浏览到/帐号/登录页面后,Membership.GetUser()的作品。 它的工作原理之后,我就可以导航到该索引页没有在开始工作,它的工作原理。
我的问题是为什么Membership.GetUser()返回NULL,当我第一次加载页面呢?
谢谢。
好吧,我发现周围的车Membership.GetUser()函数工作。
HttpContext.Current.User.Identity.Name
这段代码获取用户名的记录,并且它实际上似乎工作。 如果我有任何问题,我会回来向我报告。
尝试这个
using Microsoft.AspNet.Identity;
var id = User.Identity.GetUserId();
对面同样的问题来了。 在MVC 4,默认的认证系统是使用过滤器初始化InitializeSimpleMembershipAttribute
(这是从生成的项目的源代码很清楚)。 和过滤仅适用于AccountController
(一旦你访问登录或该控制器的任何其他页面,认证系统进行初始化,您可以用so, Membership.GetUser()
通常只要您需要它)。
对于我目前的项目,快速和肮脏的解决办法是有一定的控制,这样的定义:
[InitializeSimpleMembership]
public abstract class DefaultController : Controller
{}
并获得我的应用程序从其他控制器DefaultController
,而不是从控制器直接。 此外,该技术是关于具有常用的属性(如的DbContext变量等),在一个位置不错。
添加[InitializeSimpleMembership]到控制器
例:
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
{
// ...
}
}