gpt4 book ai didi

asp.net - 异步回发不会导致 document.ready 被执行

转载 作者:行者123 更新时间:2023-12-03 22:26:38 26 4
gpt4 key购买 nike

我必须对几个页面中使用的用户控件进行一些更改。用户控件包含一些 JQuery 来处理分页任务(显示 3 个月的数据并一次隐藏 9 个月)。当控件加载时,它会自动显示当前季度并执行$(document).ready()中的这段代码。

我遇到的问题是,在使用用户控件的页面之一中,该控件在页面加载时不可见。异步回发用于更改可见性,但这不会执行ready()。

我找到了一个片段,允许托管页面拦截部分回发的 EndResponse,但我仍然无法在用户控件中执行该函数。

有人有什么建议吗?

干杯

戴夫

最佳答案

正如我所做的那样,您会讨厌规定的 Microsoft 答案。 “规定”的答案是使用 PageRequestManager 来设置请求处理程序。该请求处理程序在每次部分回发完成后执行。

请求处理程序示例:

<script id="events" type="text/javascript">

jQuery(document).ready(function() {

// Your normal code goes here
setupSomething();
initializeSomethingElse();

// Setup your partial-postback event handler.
// This is used to rewire all events since all are 'lost' after partial-postback.
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(requestHandler);
});

///<summary>partial postback event handler. Executed after the partial postback is completed. Clears modal popup textboxes</summary>
///<param name="sender"></param>
///<param name="args">http://www.asp.net/ajax/documentation/live/ClientReference/Sys.WebForms/EndRequestEventArgsClass/default.aspx</param>
function requestHandler(sender, args) {

if (args.get_error() == undefined) {

// Your normal code goes here
setupSomething();
initializeSomethingElse();
}
else
alert(args.get_error()); // Do something
}
</script>

这给我们带来了简单的答案:
为什么不从代码隐藏中显式初始化用户控件,并将初始化 JavaScript 保留在用户控件 HTML(本身)中。

void YourUserControl_PreRender(object sender, EventArgs e)
{
try
{

}
catch (Exception ex)
{

}
finally
{
// Do this
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() {

// Your normal code goes here
setupSomething();
initializeSomethingElse();
}
</script>

关于asp.net - 异步回发不会导致 document.ready 被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com