1

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

现在,问题是,每次用户更改下拉列表中的选择时,我如何模拟(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

4 回答 4

1

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

于 2009-02-28T08:59:33.517 回答
1

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

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

于 2009-03-01T23:16:30.780 回答
0

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

于 2009-02-28T04:54:28.287 回答
0

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

于 2009-03-02T20:53:21.363 回答