我有一个页面在下拉列表选择上回发(使用AJAX更新面板)。根据下拉选择,页面上的其余UI将动态生成。在页面加载时绘制动态UI,以便在Submit
按钮单击时获取值。我面临的问题是,在下拉列表更改时,似乎会发生两个回发,一个绘制原始UI,另一个绘制更改的UI(从而产生不一致)。如何处理这个问题。有没有办法找出哪个控件导致回发,以便我可以重新绘制UI,因为选择更改/提交按钮单击发生回发。
编辑:错过了一个重要问题。更新面板的触发器是下拉列表的SelectionChanged
事件。这导致额外的回发。
答案 0 :(得分:12)
您可以检查回发,然后执行..
if (IsPostBack)
{
var targetID = Request.Form["__EVENTTARGET"];
}
编辑:您可以通过执行实际控制来实现..
if (targetID != null && targetID != string.Empty)
{
var targetControl = this.Page.FindControl(targetID);
}
答案 1 :(得分:1)
为控件使用单独的服务器事件处理程序。例如:
public void DropDown_Changed(Object sender, EventArgs e)
{
// Drop down is changed. It's the source of post back.
}
public void Button_Click(Object sender, EventArgs e)
{
// Button is the source of postback.
}
答案 2 :(得分:1)
检查下拉框是否具有AutoPostBack =“true”,因为即使没有单击提交按钮,也会导致下拉回发,所以如果单击提交按钮,它将回发两次。
查找导致回发的控件的一种方法是检查Request.Params.Get("__EVENTTARGET");