部分回发后强制执行javascript(更新面板)

时间:2013-09-12 12:01:55

标签: javascript asp.net updatepanel

我有一个UpdatePanel,并希望在回发后执行javascript操作,我的所有页面都使用全局pageLoad(sender, args)所以我不能使用pageLoad(sender, args)来处理此特定事件,我尝试了2以下方法:

//Global pageLoad, executes in all pages
function pageLoad(sender, args) {
    myGlobalCode();

    try {localPageLoad(sender, args)} 
    catch (err) {}
}

// This is in the page with the update panel
function localPageLoad(sender, args) {
    if ($('#AfterPostback').val() == 'SHOWTOOLBOX')
        // etc....
}

这里的问题是同步性,如果我在此代码中设置调试警报一切正常,但如果我执行没有警报它什么都不做,所以我想这与文档完成有关

我尝试的另一件事是在部分回发触发的事件中使用ScriptManager:

    cstext1.Append(String.Format("alert('CS TOOL'); showToolbox({0});", AfterPostbackParams.Value))
    ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "InitPage", cstext1.ToString(), True)

我发现同样的问题,如果我设置调试警报一切正常,如果我运行这样的代码它不起作用。

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:0)

你可以使用以下内容吗?

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest();
Sys.WebForms.PageRequestManager.getInstance().add_endRequest();

http://msdn.microsoft.com/en-us/library/bb397432.aspx

答案 1 :(得分:0)

在使用更新面板和其他javascript执行时,我总是使用RegisterStartupScriptRegisterClientScriptBlock获得更多运气。例如:

cstext1.Append(String.Format("showToolbox({0});", AfterPostbackParams.Value));
ScriptManager.RegisterStartupScript(Me, GetType(Page), "InitPage", cstext1.ToString(), True);

UpdatePanels的优点在于它们可以通过使用fiddler或任何现代浏览器开发人员工具的网络选项卡轻松诊断问题。由于UpdatePanel只需将已替换的HTML发送回面板div即可,因此您可以轻松查看返回的内容以确保其有意义。