2013-07-19 44 views
1

當用戶按下登錄按鈕時,按照控制器功能執行中,我使用SetAuthCookie設置用戶名:MVC3 @ C​​ontext.User.Identity.Name空值

// 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總是有空值。任何解決方案

+0

您使用哪種授權? – ssilas777

+0

我是MVC的新手。請解釋 – Azeem

+0

http://msdn.microsoft.com/en-us/library/aa291347(v=vs.71).aspx請檢查此 – ssilas777

回答

1

User.Identity.Name在AuthenticateRequest事件中設置,遠遠早於調用控制器操作時的事件。調用FormsAuthentication.SetAuthCookie僅限將身份驗證Cookie添加到響應中,它不會填充該值,這就是爲什麼它是空的。

看到的是User.Identity.Name會填寫下一個請求的頁面。通常在進行這種認證的頁面上,您會將發送POST請求的操作重定向到需要認證的頁面。

+0

您可以舉一些例子來闡述您的觀點嗎?謝謝 – Azeem

+1

而不是'返回視圖(...);'你做一個重定向:'返回RedirectToAction(「索引」);'這是一個很好的習慣做一個成功後重定向(=數據是有效的,用戶名/密碼是有效)POST。因此,如果用戶刷新網頁,他不會不經意地再次發佈帖子。 – ZippyV