标识导致回发的控件

本文关键字:控件 标识 | 更新日期: 2023-09-27 18:07:35

我有一个页面,它对下拉列表选择进行回发(使用AJAX更新面板)。根据下拉选择,页面上UI的其余部分将动态生成。动态UI是在页面加载时绘制的,用于在单击Submit按钮时获取值。我面临的问题是,在下拉改变,两个回发似乎发生,一个绘制原始的UI和一个绘制改变的UI(从而造成不一致)。如何处理这个。有没有办法弄清楚哪个控制导致回发,这样我就可以重新绘制UI时,由于选择更改/提交按钮点击回发发生。

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

标识导致回发的控件

您可以检查是否有回发,然后执行…

if (IsPostBack)
{ 
  var targetID = Request.Form["__EVENTTARGET"];
}

编辑:您可以通过执行…获得实际控制权

if (targetID != null && targetID != string.Empty)
{
    var targetControl = this.Page.FindControl(targetID);
}

为控件使用单独的服务器事件处理程序。例如:

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.
}

检查下拉框是否有AutoPostBack="true",因为这将导致下拉框即使没有点击提交按钮也会发送回,所以如果你点击提交按钮,它将发送两次。

查找引起回发的控件的方法之一是检查Request.Params.Get("__EVENTTARGET");