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)方法需要一个没有传递的参数!

知道是怎么回事吗?

谢谢

ASP.NET: HttpContext.Current.User.Identity.Name似乎在page_load上

您最大的问题是变量的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