识别导致回发的控件

时间:2011-09-06 12:09:09

标签: c# asp.net

我有一个页面在下拉列表选择上回发(使用AJAX更新面板)。根据下拉选择,页面上的其余UI将动态生成。在页面加载时绘制动态UI,以便在Submit按钮单击时获取值。我面临的问题是,在下拉列表更改时,似乎会发生两个回发,一个绘制原始UI,另一个绘制更改的UI(从而产生不一致)。如何处理这个问题。有没有办法找出哪个控件导致回发,以便我可以重新绘制UI,因为选择更改/提交按钮单击发生回发。

编辑:错过了一个重要问题。更新面板的触发器是下拉列表的SelectionChanged事件。这导致额外的回发。

3 个答案:

答案 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");