ViewState,UserControl和IsPostback

时间:2009-02-28 00:46:27

标签: c# .net viewstate

基本上,我有一个下拉列表和一个动态添加的用户控件。用户控件根据下拉列表中的选择加载网格视图。下拉列表不是用户控件的一部分。

现在,问题是,每次用户更改下拉列表中的选择时,我如何模拟(isControlPostback = false)?看起来ViewState会记住控件。

在我的用户控件中,我有:

protected bool IsUserControlPostBack
{
    get
    {
        return this.ViewState["IsUserControlPostBack"] != null;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsUserControlPostBack)
    {
        ViewState.Add("IsUserControlPostBack", true);
        //load stuff in the grid view and bind it
    }
}

当用户更改下拉列表中的选项时,我有一个javascript确认框,页面会回发。因此,下拉列表的OnSelectedIndexChanged事件不会被触发。每当所选索引发生变化时,我想删除以执行类似的操作: ViewState.Remove( “IsUserControlPostBack”);

4 个答案:

答案 0 :(得分:1)

您可以在prerender事件中对控件进行更改。触发此事件时,将执行所有其他操作。 或者,您可以在用户控制中执行公共属性,并在需要设置值时进行适当的响应。

答案 1 :(得分:1)

您在用户控件中访问的ViewState与您在页面上访问的ViewState不同。如果您需要页面与用户控件进行通信,我建议您为此用户控件添加公共方法。

  

如果由于某种原因,您更喜欢   与您的ViewState类似的东西   方法,你可以尝试Context.Items。   请注意,Context.Items不是   在请求之间保留。

答案 2 :(得分:0)

在OnLoad之前的某个时间将控件添加到页面。例如。是OnInit。在OnInit和OnLoad之间,加载了视图状态并运行了回发事件。

答案 3 :(得分:0)

对于有兴趣知道答案的人: 我最终在用户控件中实现了一个公共属性,并在服务器下拉列表SelectedIndexChanged事件而不是OnInit中加载控件。这消除了对显式Viewstate使用的需要。