ASP.NET: HttpContext.Current.User.Identity.Name似乎在page_load上
本文关键字:page load Name NET HttpContext Current Identity User ASP | 更新日期: 2023-09-27 17:51:05
基本上,我有一个默认的登录控件。aspx页面,我在那里验证用户和有效的用户名和密码,我导航到另一个页面Upload.aspx。
页面上传。我想在一个全局变量中存储用户名值,然后在多个SQL过程中传递这个全局变量。
获取页面上传的用户名值。我在page_load event
下有这段代码public partial class Upload : System.Web.UI.Page
{
public static string uname;
public static string un;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
un = HttpContext.Current.User.Identity.Name;
uname = un;
clsClass find_user_type = new clsClass();
user_Type = find_user_type.Find_UserType_Of(uname).Trim();
}
else
{
uname = un; //the first If condition will be true atleast 1st,
//so that one `un` is set i can copy it into `uname`
//when its postback
}
}
}
现在,当我在本地机器上运行它时,当服务器是我的本地主机时,这段代码运行得很好。但当我把这个上传到网络服务器时,它开始表现得很奇怪,并告诉我 中的程序Find_UserType_Of(uname)是clsClass中的一个方法,它接受一个字符串形参(uname)。
Find_UserType_Of (uname)方法需要一个没有传递的参数!
知道是怎么回事吗?
谢谢
您最大的问题是变量的static
,这将导致它的值发生变化,这取决于谁在页面上,因为该变量是为所有请求共享的。你没有注意到,因为你是唯一发出请求的人:
public static string uname;
public static string un;
应该是
private string uname;
private string un;
更多的解释可以在我对Ajax PageMethod访问页面级私有静态属性的响应中找到
您可能还想阅读有关私有变量和相关内容:为什么我应该在属性访问器中使用私有变量?
UPDATE:在Postback上也有问题,因为您没有设置un
的值。回发后仍然需要设置un
,或者直接使用HttpContext.Current.User.Identity.Name
每个对ASP的请求。. NET应用程序创建System.Web.UI.Page
的新实例,在本例中为Upload
。这意味着每个变量必须在每个将使用它的请求上设置。你可以通过使用ViewState
来绕过这个限制,使你的网页表现得像它有状态。
对于全局变量,可以使用Application
字典:Application["uname"] = HttpContext.Current.User.Identity.Name
;对于用户,可以使用Session
字典:Session["uname"] = HttpContext.Current.Identity.Name
。