无法在动态创建的DropDownList的SelectedIndexChange上触发UpdatePanel的刷新

时间:2014-05-09 14:38:54

标签: asp.net vb.net webforms updatepanel

在.Net 4.5和VB.Net Web窗体下,我有一个动态生成的DropDownList(ddlDocumentTypeId),当用户选择其中的不同项时,应触发UpdatePanel(udpCustomerDocumentActivities)其中 DropDownList不是一部分)是PostedBack并因此刷新 - 表示一种主细节屏幕排列。但是,我似乎找不到让这种情况发生的方法。我尝试过的事情:

动态创建AsyncPostBackTrigger并将其添加到Page_Init中的UpdatePanel的Triggers集合,如http://forums.asp.net/t/1080372.aspx中所述:

Dim asyncTrigger As New AsyncPostBackTrigger
asyncTrigger.ControlID = ddlDocumentTypeId.ID
asyncTrigger.EventName = "SelectedIndexChanged"
udpCustomerDocumentActivities.Triggers.Add(asyncTrigger)

上面的代码肯定会得到处理(例如,拼写错误的“SelectedIndexChanged”会引发异常)但是更改DropDownList中的项目不会导致UpdatePanel刷新。在检查生成的HTML时有意义,因为没有JavaScript onchange被附加到DropDownList,因为需要触发某种操作。

然后我发现http://www.codeproject.com/Questions/69384/UpdatePanel-Trigger-registration-for-dynamic-contr表明不支持动态添加AsyncPostBackTrigger。 然后建议添加类似于:

的东西
ScriptManager.GetCurrent(Me.Page).RegisterAsyncPostBackControl(ddlDocumentTypeId)

但是,这似乎也没有在HTML中生成任何JavaScript(并且,不清楚这将如何将DropDownList绑定到UpdatePanel)。

其他信息:

  • 在我的Page_Init中,我总是动态创建/重新创建DropDownList,以及执行我在上述方法中列出的代码。

  • 当我通过调试器在Page_Load中查找DropDownList时,看起来我在上述方法中列出的代码的结果似乎仍然有效。

  • 出于测试目的,我还在UpdatePanel内部和外部添加了一个单独的Button,并声明性地将其设置为触发UpdatePanel - 这对于必要的onclick JavaScript正常工作生成。

  • 最后,作为测试,我以编程方式将DropDownList的AutoPostBack设置为True,当我这样做时,它确实生成了一个JavaScript onchange,它按预期刷新整个页面。

所以,我的问题是:为了触发在动态创建的DropDownList的SelectedIndexChange上刷新UpdatePanel,我缺少什么?

0 个答案:

没有答案