1

我需要了解这个基本主题,因为我对网页很陌生。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            UserLogin ObjUser = new UserLogin();
            Persona ObjPersona = new Persona();
            DataSet ds = new DataSet();
            string UserName = null;
            UserName = WindowsIdentity.GetCurrent().Name;
            UserName = Regex.Replace(UserName, ".*\\\\(.*)", "$1", RegexOptions.None);                
            ds = ObjUser.GetUserData(UserName);
            ObjPersona.UserName = UserName;
            ObjPersona.RealName = ds.Tables[0].Rows[0][0].ToString();
            ObjPersona.Ranking = ds.Tables[0].Rows[0][1].ToString();
            if (((bool)ds.Tables[0].Rows[0]["TNT"] == false)) ObjPersona.TNT = false;
            else ObjPersona.TNT = true;
            if (((bool)ds.Tables[0].Rows[0]["TLG"] == false)) ObjPersona.TLG = false;
            else ObjPersona.TLG = true;
            if (((bool)ds.Tables[0].Rows[0]["NEG"] == false)) ObjPersona.Negocios = false;
            else ObjPersona.Negocios = true;
            if (((bool)ds.Tables[0].Rows[0]["RES"] == false)) ObjPersona.Residenciales = false;
            else ObjPersona.Residenciales = true;
            if (((bool)ds.Tables[0].Rows[0]["BO"] == false)) ObjPersona.BO = false;
            else ObjPersona.BO = true;
            if (((bool)ds.Tables[0].Rows[0]["BOA"] == false)) ObjPersona.BOA = false;
            else ObjPersona.BOA = true;
            ObjUser.CreateRegister(ObjPersona);
        }
    }

页面加载后的简单执行。存储过程填充数据集,然后我使用数据集将数据放入对象中,在本例中为 ObjPersona

现在,假设我打算在另一个调用中使用 ObjPersona。

protected void BtnClose_Click(object sender, EventArgs e)
    {            
        ObjUser.UpdateRegister(ObjPersona);
        LblClose.Text = "Sesión Cerrada";
    }

它不起作用,因为那里没有数据。(一旦我想使用对象内的数据就会出现错误)

我想只调用一次获取用户数据的过程(本例为 page_load),然后从那里使用它。如何访问在另一个控件中调用的数据?

谢谢。

4

1 回答 1

3

为每个请求创建一个新的 asp.net Page 对象实例。每次回发到页面时InitLoad都会调用 , , 事件处理程序。你不是在处理同一个对象。

如果您在上次请求期间填充了成员变量,则这次将不可用。

您需要使用一些方法在 Postbacks 中保留您的数据。

Asp.net 提供了两种内置方法来执行此操作。一个是ViewState,另一个是Session。会话变量存储在服务器上,ViewState数据存储在表单中的隐藏输入变量中。

如果您有大量数据,请DataSet避免将其放入ViewState. 它会创建一个大的 ViewState 并使您的页面加载缓慢。

于 2012-08-06T19:59:01.800 回答