基本上,我有一个下拉列表和一个动态添加的用户控件。用户控件根据下拉列表中的选择加载网格视图。下拉列表不是用户控件的一部分。
现在,问题是,每次用户更改下拉列表中的选择时,我如何模拟(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”);
答案 0 :(得分:1)
您可以在prerender事件中对控件进行更改。触发此事件时,将执行所有其他操作。 或者,您可以在用户控制中执行公共属性,并在需要设置值时进行适当的响应。
答案 1 :(得分:1)
您在用户控件中访问的ViewState与您在页面上访问的ViewState不同。如果您需要页面与用户控件进行通信,我建议您为此用户控件添加公共方法。
如果由于某种原因,您更喜欢 与您的ViewState类似的东西 方法,你可以尝试Context.Items。 请注意,Context.Items不是 在请求之间保留。
答案 2 :(得分:0)
在OnLoad之前的某个时间将控件添加到页面。例如。是OnInit。在OnInit和OnLoad之间,加载了视图状态并运行了回发事件。
答案 3 :(得分:0)
对于有兴趣知道答案的人: 我最终在用户控件中实现了一个公共属性,并在服务器下拉列表SelectedIndexChanged事件而不是OnInit中加载控件。这消除了对显式Viewstate使用的需要。