ASP.NET控件分配给属性null

时间:2014-10-16 15:04:26

标签: c# asp.net events user-controls controls

我有一段代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        _SearchResult.GridViewChanged += _SearchResult_GridViewChanged;
    }

    public Control GvControls { get; set; }

    protected void _SearchResult_GridViewChanged(object sender, Orders.GridViewChangedEventArgs e)
    {
        this.GvControls = e.GControl;            
    }

    protected void export_ServerClick()
    {
        new ExportGridView(this.GvControls,"report");
    }

一个控件使用事件arg生成事件并通过arg推送控件,然后其他(此)控件使用此arg执行一些俯卧撑

当我尝试做推动export_ServerClick()属性GvControls等于null但是在不应该为空之前。为什么会这样。

ThankX

1 个答案:

答案 0 :(得分:1)

所有变量(甚至控件)都放置在页面生命周期的末尾。这就是为什么你必须在回发时重新创建所有动态创建的控件的原因。出于同样的原因,您必须使用所需的值重新初始化变量。

所以我假设首先触发GridViewChanged - 事件。然后用户单击另一个触发export_ServerClick - 事件处理程序的按钮。此时,字段GvControls已获得默认值null

您必须在某处保留此值,例如Session

Nine Options for Managing Persistent User State in Your ASP.NET Application

但是,我认为你不应该坚持控制本身。也许存储控件的ID就足够了。也许最好在导出它之前从数据源再次加载它有两个原因:

  1. 显示的数据可能已经过时,因为其他用户已更改
  2. 你不需要在控件中摆弄字符串,但你有原始值