【问题标题】:Accessing Controls Values Before Finishing Page_Load在完成 Page_Load 之前访问控件值
【发布时间】:2010-06-16 21:27:54
【问题描述】:

我遇到了问题,想知道是否有人可以帮助我。

我正在创建一个包含一些控件的表,并且我想在每个回发中保存所有控件值。由于控件只是在 page_load 之后定义的,因此我无法通过这种方式解决我的问题:

object o;
protected void Page_Load(object sender, EventArgs e)
{
 o = createObject();
    Create_Table();
 if (Page.IsPostBack)
    Save_Data();
}

我认为我可以在每个回发事件开始时执行 Save_Data(),但我认为应该存在更好的方法来解决我的问题。

谢谢。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    既然您希望它位于页面级别,为什么不使用 ViewState?由于 o 似乎总是使用相同的数据进行设置,因此可能不需要再设置一次,但如果你真的想要,你可以删除 if not postback 的东西......

    protected object o
    {
        get {
            return ViewState["o"];
        }
        set {
            ViewState["o"] = value;
        }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack) { o = createObject(); }        
        Create_Table();
        if (Page.IsPostBack)
            Save_Data();
    }
    

    【讨论】:

      【解决方案2】:

      回发完成后,您的变量“o”将不包含您的原始值。这是因为每个请求都会在服务器上创建一个新的页面对象,并且您的成员变量值将丢失。最好使用内置的 'Session' 属性在请求之间保存数据。

      看我的回答here

      【讨论】:

      • 问题是:我不希望对象作为会话变量,我更喜欢在每个 page_load 上创建它。该对象是基于一些文件创建的,它的主要功能是:给出表的结构和存储表的值。该表将始终具有相同的结构,但其值可能会有所不同,我想在发生任何事情之前将它们保存在文件中的新值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多