在.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,我缺少什么?