MVC3 @ C​​ontext.User.Identity.Name空值

时间:2013-07-19 20:14:27

标签: c# asp.net-mvc-3 visual-studio-2012

当用户按下登录按钮时,执行控制器中的以下功能,我使用SetAuthCookie设置用户的名字:

// POST: /Account/SignUp
    [HttpPost]
    public ActionResult Index(ConsumerView consumerData)
    {
        try
        {
            ConsumerManager consumerManagerObj = new ConsumerManager();
            if (consumerManagerObj.IsValidUser(consumerData.LoginID, consumerData.Password))
            {
                FormsAuthentication.SetAuthCookie(consumerData.FirstName, false);
                return View ("WelcomeConsumer");
            }
            else
            {
                ModelState.AddModelError("", "Invalid Username/Password!!");
            }

        }
        catch
        {
            return View(consumerData);
        }

        return View(consumerData);
    }

WelcomeConsumer视图有代码:

@{
ViewBag.Title = "Home";
}

<h2>Welcome</h2>

<h2>Hi <b>@Context.User.Identity.Name</b></h2>
@Html.ActionLink("[Sign Out]", "SignOut", "ConsumerAccount")

<p>
<ul>
    <li>@Html.ActionLink("Book new Ticket", "NewBooking", "ConsumerAccount")</li>
    <li>@Html.ActionLink("View all Bookings", "ViewAllBookings", "ConsumerAccount")    </li>
</ul>
@ViewBag.NewBookingSuccess
</p>

@Context.User.Identity.Name总是有空值。任何解决方案?

1 个答案:

答案 0 :(得分:1)

User.Identity.Name在AuthenticateRequest事件中设置,该事件远早于调用控制器操作时的事件。只调用FormsAuthentication.SetAuthCookie 会将身份验证Cookie添加到响应中,但不会填充该值,这就是为空的原因。

看到的是User.Identity.Name将在下一次页面请求时填写。通常在正在进行此类身份验证的页面上,您将从发送POST请求的操作重定向到需要身份验证的页面。