我有这样的结构。
UpdatePanel1
| |
| CheckBoxes - in code behind CheckBoxCheckedHandel() method
|
|---Usercontrol1
|
UpdatePanel2
|
Button1
现在问题就出现了。
当我点击Button1
时,会导致UpdatePanel1
刷新并调用CheckBoxCheckedHandel()
方法。因此,我想要一个导致回发的控件名称,或者我想在UpdatePanel2
点击时仅刷新Button1
。
我想说的另一件事是我在两个更新面板上显示时间,看看当事情发生时它们是否令人耳目一新。此时button1单击事件不会刷新UpdatePanel1
时间,但仍会调用CheckBoxCheckedHandel()方法。
过去2天我遇到了这个问题,请帮忙。
注意: UpdatePanel1 - updatemode - 有条件且没有触发器 UpdatePanel2 - updatemode - 用于button1单击事件的条件和asp:asyncTriggre
答案 0 :(得分:2)
以下是如何获取导致异步回发的控件的ID。在你的Page_Load处理程序中输入以下代码:
if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
{
string id = Utils.GetAsyncPostBackControlID(Page, Page.Request);
}
以下函数获取ID:
public static string GetAsyncPostBackControlID(Page page, HttpRequest request)
{
string smUniqueId = ScriptManager.GetCurrent(page).UniqueID;
string smFieldValue = request.Form[smUniqueId];
if (!String.IsNullOrEmpty(smFieldValue) && smFieldValue.Contains('|'))
return smFieldValue.Split('|')[1];
return String.Empty;
}
导致回发的控件的ID存储在一个隐藏字段中,该名称是该页面的ScriptManager的ID。值以Script_Manager_ID|Control_ID
答案 1 :(得分:0)
要获取导致异步回发的控件,您可以使用以下代码而不是解析
var asyncPostBackSourceControl = Page.FindControl(scriptManager.AsyncPostBackSourceElementID)