2012-07-27 92 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();