RegisterClientScriptBlock within AJAX method call

2019-01-18 00:00发布

I am trying to RegisterClientScriptBlock in a method that is only called via an AJAX call. It doesn't appear to actually register the script on the page and I'm guessing this is because it's not actually reloading the entire page. Is there any way to register javascript on a page from within an ajax method call?

    protected void MyMethod(object sender, EventArgs e)
    {
        // This method only called via AJAX call

        Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "resize", "alert('here');", true);
    }

5条回答
男人必须洒脱
2楼-- · 2019-01-18 00:09

It works if you specify the UpdatePanel being updated on the AJAX call back. For example:

ScriptManager.RegisterClientScriptBlock(UpdatePanelMain, typeof(UpdatePanel),
   UpdatePanelMain.ClientID,
   "document.getElementById('imgLoading').style.display = 'none';" +
   "document.getElementById('divMultiView').style.display = 'inline';",
   true);

The control in the first argument must be inside the update panel or the update panel itself that triggers the update.

查看更多
淡お忘
3楼-- · 2019-01-18 00:14

In general, when loading external javascript after appending an element innerHTML with a block containing such script, one needs to evaluate (eval) the script in order for it to work properly and render itself into the current loaded document.

I'd suggest doing on of the following:

Use an external tool such as YUI get utility which is supposed to enable such behavior or do some evaluation for scripts yourself like this

查看更多
Anthone
4楼-- · 2019-01-18 00:22

With AJAX enabled pages, you should use the ScriptManager to register scripts:

ScriptManager.RegisterClientScriptBlock(Page, typeof(MyPage), 
    "MyScript", "GoStuff()", true)

You can use this to register all your scripts (Original load, postback, AJAX postback).

查看更多
forever°为你锁心
5楼-- · 2019-01-18 00:22

If there's anyone else out there like myself, and the accepted answer STILL won't work for you, then look no further.

Check out this link - a simple class that pops a Javascript alert no matter if you're on page load, unload, AJAX request, etc:

WebMsgBox.Show("Your message here");
查看更多
劫难
6楼-- · 2019-01-18 00:34

As far as I know for this you would be forced to be calling this method via a PostBack and not an ajax call. There may be OTHER ways of doing this, but it is not possible with Page.ClientScript....

查看更多
登录 后发表回答