2009-10-01 93 views
1

我想有在我所有的觀點一些可視數據信息,所以我下面這個教程如何從控制器獲取User.Identity.Name?

http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx

所以我做了我自己的ApplicationController,但我需要得到來自用戶的用戶名。

然而,當我在構造函數中這樣做「HttpContext.User.Identity.Name」時,它始終爲空。我不知道爲什麼。

謝謝

好吧,基地的事情做到了。

protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 
     Guid userId = coursesS.GetUserId(HttpContext.User.Identity.Name); 
    } 

這樣似乎工作。現在唯一的事情似乎是經歷了兩次。就像我登錄,它似乎做了兩次。我猜測,因爲這就好像把代碼放在每一個動作中一樣。當我通過在我的控制器中調用它們來加載所有這些局部視圖時,它會執行此操作。

這麼多我應該緩存它,但我不知道如何。

回答

4

嘗試在ApplicationController中的初始化方法的初始化的東西,HttpContext的是不能在構造avaliable。確保調用base.Initialize()或者你可以得到一些有趣的結果。

+1

我在哪裏叫這個base.Initialze()?我不知道在哪裏堅持它 – chobo2 2009-10-01 20:36:26

0

使用

Page.User.Identity.Name 
+0

爲什麼選擇投票?這個對我有用?儘管如果這意味着我正在學習新的東西,我很樂意接受downvote ... – David 2009-10-01 20:33:18

+0

不知道爲什麼有人投票你做了。我試過了,並且出現此錯誤:錯誤非靜態字段,方法或屬性'System.Web.UI.Page.User.get'需要對象引用 – chobo2 2009-10-01 20:34:44

+0

他不在頁面上。他正在創建一個自定義控制器。 – 2009-10-01 20:36:16

0

你在一個控制器,以便使用以下命令:

ControllerContext.HttpContext.Current.User.Identity.Name 
+0

當我嘗試在抽象基本控制器中執行此操作時發生此錯誤。 錯誤對於非靜態字段,方法或屬性'System.Web.Mvc.ControllerContext.HttpContext.get' – chobo2 2009-10-01 20:33:24

+0

需要對象引用請參閱上面的Wyatt的註釋。確保你調用base.Initialize()。 – 2009-10-01 20:35:40

+0

我在哪裏堅持它的構造? – chobo2 2009-10-01 20:39:05

2

您正在訪問哪個特定屬性爲空?在檢查Name屬性之前,您可能需要檢查User.Identity.IsAuthenticated == true。還要確保表單身份驗證已啓用,並且確實已經確實先登錄了該站點。

+0

好點。任何這些問題肯定會導致所述的錯誤。 – David 2009-10-01 20:36:18

+0

用戶爲空。這是什麼是空的 – chobo2 2009-10-01 20:37:15

+0

哦,你是我登錄。如果我拿出那條線,並嘗試登錄,我去授權頁面。 – chobo2 2009-10-01 20:38:26

6
HttpContext.Current.User.Identity.Name 

注意.Current我們從您的通話丟失。

+0

嗯我可能需要導入的東西,因爲我得到這個: 錯誤'System.Web.HttpContextBase'不包含'當前'的定義和沒有擴展方法'當前'接受類型'系統的第一個參數.Web.HttpContextBase'可以找到(你是否缺少使用指令或程序集引用?) – chobo2 2009-10-01 20:35:45