我在一个只通过AJAX调用调用的方法中尝试RegisterClientScriptBlock。它似乎没有在页面上实际注册脚本,我猜这是因为它实际上并没有重新加载整个页面。有没有办法在ajax方法调用中在页面上注册javascript?
protected void MyMethod(object sender, EventArgs e)
{
// This method only called via AJAX call
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "resize", "alert('here');", true);
}
答案 0 :(得分:20)
启用AJAX页面后,您应该使用ScriptManager注册脚本:
ScriptManager.RegisterClientScriptBlock(Page, typeof(MyPage),
"MyScript", "GoStuff()", true)
您可以使用它来注册所有脚本(原始加载,回发,AJAX回发)。
答案 1 :(得分:1)
如果您在AJAX回调中指定正在更新的UpdatePanel
,则它可以正常工作。例如:
ScriptManager.RegisterClientScriptBlock(UpdatePanelMain, typeof(UpdatePanel),
UpdatePanelMain.ClientID,
"document.getElementById('imgLoading').style.display = 'none';" +
"document.getElementById('divMultiView').style.display = 'inline';",
true);
第一个参数中的控件必须位于更新面板或触发更新的更新面板本身内。
答案 2 :(得分:0)
据我所知,你将被迫通过PostBack而不是ajax调用来调用此方法。可能有其他方法可以执行此操作,但使用Page.ClientScript ....
是不可能的答案 3 :(得分:0)
通常,在将元素innerHTML附加到包含此类脚本的块之后加载外部javascript时,需要评估(eval)脚本以使其正常工作并将其自身呈现为当前加载的文档。
我建议做以下事情:
使用YUI get utility等外部工具来启用此类行为或自行对脚本进行一些评估like this
答案 4 :(得分:0)
如果有其他人喜欢我自己,并且接受的答案仍然不适合你,那么请不要再看了。
Check out this link - 一个简单的类,无论您是在页面加载,卸载,AJAX请求等,都会弹出Javascript警报:
WebMsgBox.Show("Your message here");