我知道这似乎不切实际,但我真的更喜欢这样做,因为我正在重新设计这个 WebForms 页面以满足紧急的、最后一刻的业务需求。
我有一个自定义用户控件。在这个用户控件中是一个 Javascript 块,其中包含连接到各种控件onclick
和onchange
事件的函数。之前,控件的.Visible
属性是True
,所以它的 HTML 和 Javascript 会在页面上呈现。
现在我需要将控件的.Visible
属性设置为false
并在其周围包裹一个 UpdatePanel。这样做可以防止控件的 HTML 在初始页面加载期间呈现。要显示控件的内容,用户必须单击一个按钮,该按钮会点击一个服务器端方法,该方法将控件的.Visible
属性设置为true
. 由于它现在位于 UpdatePanel 中,因此该控件以一种 Ajaxy 方式出现在页面上。但是,控件中的 Javascript 似乎不可访问,因此子控件onclick
和onchange
事件都不起作用,因为它们的关联 Javascript 函数是undefined
.
为了简洁起见,由于过于复杂而无法进入的原因,我不想使用的解决方案:
- JSON/AJAX(在这么短的时间内涉及太多的重构)
- CSS display:none/visibility:visible(我需要尽可能多地保留服务器端功能以最小化重新架构)
- 将 Javascript 放在父页面或 .js 文件中(我会认为这是最后的手段,但我使用 . 引用服务器控件
<#%=ControlId.ClientID %>
。如果 Javascript 不包含在 UserControl 中并且我不想将控件设置ClientIdMode
为static
.)
我真的很想找到一种方法将 Javascript 保留在我的 UserControl 中,这样当 UpdatePanel 使用 UpdatePanel 将控件的.Visible
属性设置为时,客户端可以访问它true
。