3

我已经实现了我自己的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 ?

谢谢。

4

5 回答 5

2

好吧,我找到了一个解决有缺陷的 Membership.GetUser() 函数的方法。

HttpContext.Current.User.Identity.Name

这段代码获取了登录的用户名,它实际上似乎可以工作。如果我有任何问题,我会在这里报告。

于 2012-09-26T04:21:13.010 回答
1

请看下面的帖子,也许你有同样的问题?:

希望这可以帮助

于 2012-09-25T03:25:36.407 回答
1

试试这个

using Microsoft.AspNet.Identity;

var id = User.Identity.GetUserId();
于 2014-06-17T16:20:22.913 回答
0

刚刚遇到同样的问题。在 MVC 4 中,默认的身份验证系统是使用过滤器初始化InitializeSimpleMembershipAttribute的(从生成的项目的源代码中很清楚)。并且过滤器只适用于AccountController(因此,一旦您访问登录或该控制器的任何其他页面,身份验证系统就会被初始化,您可以Membership.GetUser()在任何需要的地方正常使用)。

对于我当前的项目,快速而肮脏的解决方案是拥有一些控制器,定义如下:

[InitializeSimpleMembership]
public abstract class DefaultController : Controller
{}

DefaultController并从而不是直接从 Controller派生我的应用程序的其他控制器。此外,这种技术非常适合在一个地方拥有常用属性(如 dbcontext 变量等)。

于 2013-07-09T15:08:13.393 回答
0

将 [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
    {
        // ...
    }
}
于 2014-02-09T19:41:57.370 回答