2015-03-19 70 views
0

我目前正在更新一箇舊的Web表單項目的過程中,我們有點卡住能夠壓縮代碼。在母版頁中使用User.Identity.Name

作爲一個背景,我去年只學過C#,並且一直在MVC中開發,不過這個項目是用vb.net和WebForms編寫的,它有一些非常愚蠢和過時的邏輯/方法。

無論如何,在舊版本有下面的代碼片段在每一頁上:

currentUser = Membership.GetUser(User.Identity.Name) 

Dim myMasterPage As Main = CType(Page.Master, Main) 
myMasterPage.SetCustomerGreeting("You are logged in as: " & currentUser.UserName) 

的代碼被重複多次,並有這似乎很不好我在多個地方爲它而改變在整個網站上保持一致。這是目前用來輸出:

You are logged in as: Jason 

在我Main.Master.vb我現在已經添加以下代碼:

currentUser = Membership.GetUser(HttpContext.Current.User.Identity.Name) 
    If (currentUser IsNot Nothing) Then 
     SetCustomerGreeting("You are logged in as: " & currentUser.UserName) 
    End If 

,輸出:

You are logged in as : [email protected] 

我的問題是,我怎麼才能讓它輸出實際的用戶名(本例中是jason)而不是電子郵件地址,因爲當我檢索currentUser變量的數據時,它不會讓我在我的主頁面中使用User.Identity.Name。

任何幫助將不勝感激。

回答

0

作爲一種幫助:在內容頁面中定義@MasterType將允許您擺脫類型轉換(CType)。它提供了一種創建ASP.NET主頁的強類型引用的方法,它將允許您直接調用SetCustomerGreeting。但是,我認爲您不需要SetCustomerGreeting。只需使用直接在主頁上的語法如下(或類似的東西):

<%=HttpContext.Current.User.Identity.Name %> 

很是怪異,雖然該用戶名返回用戶的電子郵件ADRES,而不是名字。

+0

謝謝。這是我已經使用,雖然。你提到的CType的東西是我想要擺脫的舊代碼,甚至沒有被我編程。 – jezzipin 2015-03-19 11:07:25