我有一个 UserControl,我想根据某些业务规则以编程方式将其多次包含在页面中。目前该控件具有必须在 ASP.NET AJAX 上调用的 JavaScript 函数 pageLoad
事件。
我使用的模式是母版页有 pageLoad
调用 contentPageLoad
的函数任何 ContentTemplate 上的函数(如果该函数存在)。然后,保存相关 UserControl 的 ContentTemplate 将负责在此事件期间调用 UserControl 上的适当函数。
现在,JavaScript 内联在 .ascx
中对于 UserControl,但我有一种感觉,我需要使用 Page.ClientScript
属性通过后面的代码注入(inject)它。我的问题是:如何确保我的函数名称不会被破坏,并确保为每个 UserControl 调用适当的方法?
仅供引用:每个 UserControl 需要执行的代码是一个 jQuery block ,它从标准 HTML <select>
创建一个多选控件。 .
编辑: RegisterStartupScript
建议这样做,但这会在 DOM 完成加载之前运行。将函数包装在 jQuery Document.ready() 中似乎没有帮助。用户控件正在 UpdatePanel
内运行,所以我真的没有选择如何调用这个脚本。
最佳答案
一种解决方案是在 JS 函数定义中使用用户控件的 ClientID
:
function onLoadInitialize_<%=ClientID%>(){/*do things*/}
然后使用Page.ClientScript.RegisterStartupScript
使其在client-onLoad期间发生。请注意 page_load
happens on every asynchronous postback ;如果您希望每次实际页面加载(不包括异步回发)只发生一次,请改用 init 事件。
关于ASP.NET AJAX 和用户控件 : handling client side scripting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002337/