我必须对几页中使用的用户控件实施一些更改.用户控件包含一些JQuery来处理分页任务(显示3个月的数据并一次隐藏9个).加载控件后,它将自动显示当前季度并在$(document).ready()中执行此代码.
我遇到的问题是,在其中一个页面中使用了用户控件,该控件在页面加载时不可见.异步回发用于更改可见性,但这不执行ready().
我找到了一个片段,允许托管页面拦截部分回发的EndResponse,但我仍然无法在usercontrol中执行该功能.
有没有人有什么建议?
干杯
戴夫
Pri*_*ERO 11
就像我一样,你会讨厌微软规定的答案."规定"的答案是使用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>
Run Code Online (Sandbox Code Playgroud)
这让我们回答简单的答案:
为什么不从代码隐藏中明确初始化用户控件,并在用户控件HTML(本身)中保持初始化JavaScript.
void YourUserControl_PreRender(object sender, EventArgs e)
{
try
{
}
catch (Exception ex)
{
}
finally
{
// Do this
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "registerInitializer", buildInitializer(), true);
}
}
Run Code Online (Sandbox Code Playgroud)
渲染完成后,"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();
}
Run Code Online (Sandbox Code Playgroud)
现在,您的用户控件初始化可以存在于用户控件所在的位置:
<script type="text/javascript">
function initializeMyControl() {
// Your normal code goes here
setupSomething();
initializeSomethingElse();
}
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7452 次 |
| 最近记录: |