2012-07-27 27 views
0

我正在使用ASP.NET/C#在ASP.NET的菜單上顯示用戶名的正確方法

我目前使用Session顯示登錄用戶的名字和中間名。

下面是代碼

HTML:

<li><a href="#"><%=Session["UserFName"]%>&nbsp;<%=Session["UserMName"]%>&#9660;</a> 

代碼背後:

//Call the function which returns User's Name 
var userName = userBLL.GetUserName(HttpContext.Current.User.Identity.Name); 
if (userName != null) 
{ 
Session["UserFName"] = userName.FirstName; 
Session["UserMName"] = userName.MiddleName; 
} 

這裏是GetUserName函數

public Users_AdditionalInfo GetUserName(string userCode) 
{ 
using (var db = new DataClasses1DataContext()) 
{ 
var userName = db.Users_AdditionalInfos.Where(user => user.UserCode.Equals(userCode)).SingleOrDefault(); 
return userName; 
} 

} 

正在使用Session variables做我想做的事情是好嗎?

你們有很多人做了什麼來達到這個目的?

歡迎任何建議。

+0

其實沒有必要。您可以在代碼隱藏類中聲明公共字符串字段/屬性,並使用這些字段而不是'Session ['UserFName']'。 – 2012-07-27 07:59:33

+0

@KubaWyrostek你可以舉一個簡單的例子,如果可能的話,我可以把它做好,但我在其他人的做法中會有所影響。感謝很多。 – freebird 2012-07-27 08:01:18

+0

如你所願,我做到了。 :-) – 2012-07-27 08:08:26

回答

1

你剛纔提到ASP.NET,而不是MVC。您是否使用MVC?

如果沒有,你爲什麼不把Literal控制<li>內並填充在頁面加載

在你的aspx是這樣的:

<li><a href ="#"><asp:Literal ID="lt_name" EnableViewState="false" 
runat="server" Text=""></asp:Literal></a> 

在頁面加載你這樣做:

var userName = userBLL.GetUserName(HttpContext.Current.User.Identity.Name); 

lt_name.text = userName.Firstname + " " + username.Lastname; 
+0

我沒有使用MVC,你能否詳細說明你的建議。謝謝。 – freebird 2012-07-27 08:08:01

+0

感謝這個例子,假設我想在其他頁面上使用這些名稱,那麼使用Session會更好?您推薦什麼。 – freebird 2012-07-27 08:16:59

+1

如果您在其他頁面上具有相同的內容(例如菜單),我建議您查看使用母版頁並將代碼放在那裏。否則,您可以使用課程來存儲數據。 – Pleun 2012-07-27 08:19:49

1

您可以使用ViewState的嘗試,因爲你只需要通過菜單頁面上的值(你不另一頁需要)

ViewState["UserFName"] = userName.FirstName; 
ViewState["UserMName"] = userName.MiddleName; 

Or with InputHidden 
+0

非常感謝答案,但ViewState和Session之間有什麼區別。 – freebird 2012-07-27 08:03:46

+0

視圖狀態爲了在你的頁面中緩存數據有回發操作,但會話在整個導航過程中提供緩存數據 – 2012-07-27 08:05:43

+0

你的意思是ViewState將爲我的特定頁面提供數據,Session將爲所有頁面提供數據。 – freebird 2012-07-27 08:06:44

1

在您的代碼隱藏類

您指定其中的背後
public string UserFName = ""; 
public string UserMName = ""; 

代碼:

//Call the function which returns User's Name 
var userName = userBLL.GetUserName(HttpContext.Current.User.Identity.Name); 
if (userName != null) 
{ 
this.UserFName = userName.FirstName; 
this.UserMName = userName.MiddleName; 
} 

最後在ASPX代碼:

<li><a href="#"><%=UserFName%>&nbsp;<%=UserMName%>&#9660;</a> 

請記住,如果有允許用戶名特殊的HTML字符 - 你在打印出來之前需要轉義這些字符。

+0

非常感謝,好主意。感謝您的詳細解答:) – freebird 2012-07-27 08:09:56

+0

其實從長遠來看這不是一個好主意。 ;]更好的方法是將簡單的asp:Label控件放置在要顯示UserName的位置,並在代碼隱藏中分配此Label的內容。 :] – 2012-07-27 08:11:52

+0

Kuba好吧,如果我在其他頁面中使用我的用戶名,那麼爲什麼不使用會話本身?謝謝。 – freebird 2012-07-27 08:13:01

0
在你的aspx頁面或網站母版頁

簡單地把一個標籤一樣..

<asp:Label ID="lblLoggedUser" runat="server" Font-Names="Verdana" Enabled="false" 
         ForeColor="Blue" Font-Size="13px"></asp:Label> 

fitst採取登錄用戶價值會話從登錄頁面這樣。

Session["USER"] =txtusername.text; 

和你sitemaster.cs頁的Page_Load中

lblLoggedUser.text= Session["USER"].tostring();