Can't get ScriptManager.RegisterStartupScript in WebControl nested in UpdatePanel to work

前端 未结 10 1286
不思量自难忘°
不思量自难忘° 2020-12-12 17:20

I am having what I believe should be a fairly simple problem, but for the life of me I cannot see my problem. The problem is related to ScriptManager.RegisterStartupScript,

相关标签:
10条回答
  • 2020-12-12 18:04

    Sometimes it doesnt fire when the script has some syntax error, make sure the script and javascript syntax is correct.

    0 讨论(0)
  • 2020-12-12 18:06

    I had an issue using this in a user control (in a page this worked fine); the Button1 is inside an updatepanel, and the scriptmanager is on the usercontrol.

    protected void Button1_Click(object sender, EventArgs e)  
    {  
        string scriptstring = "alert('Welcome');";  
        ScriptManager.RegisterStartupScript(this, this.GetType(), "alertscript", scriptstring, true);  
    }
    

    Now it seems you have to be careful with the first two arguments, they need to reference your page, not your control

    ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alertscript", scriptstring, true);
    
    0 讨论(0)
  • 2020-12-12 18:10

    I try many things and finally found that the last parameter must be false and you must add <SCRIPT> tag to the java script :

    string script = "< SCRIPT >alert('hello!');< /SCRIPT>";
    
    ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), key, script, **false**);
    
    0 讨论(0)
  • 2020-12-12 18:11

    The solution is to put the scripts in an outside js file (lets called 'yourDynamic.js') and re-register de file everytime you refresh the updatepanel.

    I use this in the updatepanel_prerender event:

    ScriptManager.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), "UpdatePanel1_PreRender", _
                       "<script type='text/javascript' id='UpdatePanel1_PreRender'>" & _
                       "include('yourDynamic.js');" & _
                       "removeDuplicatedScript('UpdatePanel1_PreRender');</script>" _
                       , False)
    

    In the page or in some other include you will need this javascript:

    // Include a javascript file inside another one.
    function include(filename)
    {
        var head = document.getElementsByTagName('head')[0];
    
        var scripts = document.getElementsByTagName('script');
        for(var x=0;x<scripts.length;>    {
            if (scripts[x].getAttribute('src'))
            {
                if(scripts[x].getAttribute('src').indexOf(filename) != -1)
                {
                    head.removeChild(scripts[x]);
                    break;
                }
            }
        }
    
        script = document.createElement('script');
        script.src = filename;
        script.type = 'text/javascript';
        head.appendChild(script)
    }
    
    // Removes duplicated scripts.
    function removeDuplicatedScript(id)
    {
        var count = 0;
        var head = document.getElementsByTagName('head')[0];
    
        var scripts = document.getElementsByTagName('script');
        var firstScript;
        for(var x=0;x<scripts.length;>    {
            if (scripts[x].getAttribute('id'))
            {
                if(scripts[x].getAttribute('id').indexOf(id) != -1)
                {
                    if (count == 0)
                    {
                        firstScript = scripts[x];
                        count++;
                    }
                    else
                    {
                        head.removeChild(firstScript);
                        firstScript = scripts[x];
                        count = 1;
                    }
                }
            }
        }
        clearAjaxNetJunk();
    }
    // Evoids the update panel auto generated scripts to grow to inifity. X-(
    function clearAjaxNetJunk()
    {
        var knowJunk = 'Sys.Application.add_init(function() {';
        var count = 0;
        var head = document.getElementsByTagName('head')[0];
    
        var scripts = document.getElementsByTagName('script');
        var firstScript;
        for(var x=0;x<scripts.length;>    {
            if (scripts[x].textContent)
            {
                if(scripts[x].textContent.indexOf(knowJunk) != -1)
                {
                    if (count == 0)
                    {
                        firstScript = scripts[x];
                        count++;
                    }
                    else
                    {
                        head.removeChild(firstScript);
                        firstScript = scripts[x];
                        count = 1;
                    }
                }
            }
        }
    }
    

    Pretty cool, ah...jejeje This part of what i posted some time ago here.

    Hope this help... :)

    0 讨论(0)
提交回复
热议问题