识别导致页面回传的控件

4
我有一个页面,在下拉列表选择后进行回发(使用AJAX更新面板)。根据下拉选择,页面上的其余UI是动态生成的。动态UI在页面加载时绘制,以便在单击“提交”按钮时获取值。我面临的问题是,在下拉更改时,似乎会发生两个回发,一个绘制原始UI,另一个绘制更改后的UI(从而创建不一致性)。如何处理这个问题。是否有办法找出哪个控件引起了回发,以便在由于选择更改/提交按钮单击而发生回发时重新绘制UI。编辑:问题中错过了一个重要点。更新面板的触发器是下拉列表的SelectionChanged事件。这会导致额外的回发。
3个回答

13

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

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

编辑:您可以通过以下方式获取实际控件..

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

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

1

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

查找导致回发的控件的一种方法是检查Request.Params.Get("__EVENTTARGET");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接