就像我做的一样,你可能会讨厌微软的官方答案。"官方"答案是使用PageRequestManager来设置请求处理程序。这个请求处理程序会在每次部分后续请求完成后被执行。
请求处理程序示例:
<script id="events" type="text/javascript">
jQuery(document).ready(function() {
setupSomething();
initializeSomethingElse();
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(requestHandler);
});
function requestHandler(sender, args) {
if (args.get_error() == undefined) {
setupSomething();
initializeSomethingElse();
}
else
alert(args.get_error());
}
</script>
这就是简单的答案:
为什么不在代码后台明确初始化您的用户控件,并将该初始化JavaScript保存在用户控件的HTML中。
void YourUserControl_PreRender(object sender, EventArgs e)
{
try
{
}
catch (Exception ex)
{
}
finally
{
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "registerInitializer", buildInitializer(), true);
}
}
一旦渲染完成,“buildInitializer”逻辑将会判断:“如果该函数在客户端上存在...就调用它。” 然后......每次都有效。
private string buildInitializer()
{
StringBuilder javascript = new StringBuilder();
javascript.Append("if (window.initializeMyControl) {");
javascript.Append("if(typeof window.initializeMyControl == 'function') { initializeMyControl(); }");
javascript.Append("}");
return javascript.ToString();
}
现在你的用户控件初始化可以存在于应该存在的地方:用户控件中:
<script type="text/javascript">
function initializeMyControl() {
setupSomething();
initializeSomethingElse();
}
</script>