简体   繁体   中英

'Neatest' way of adding javascript to a page footer in asp.net

Whenever i want to add a javascript library programatically, say jquery for example, it generally involves making sure there is a placeholder at the footer of my page, then calling a codebehind method that will take a link to the src as a parameter and return an htmlgeneric control, which is then added to this placeholder .

Is this still the neatest way to do it, even with .net 4.0 out?

I think a better way is to use the RegisterStartupScript method:
http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx

And even better in your case RegisterClientScriptInclude:
http://msdn.microsoft.com/en-us/library/kx145dw2.aspx

EDIT:
Here's a sample of RegisterClientScriptInclude:

if (!Page.ClientScript.IsClientScriptIncludeRegistered("myJsInclude"))
   Page.ClientScript.RegisterClientScriptInclude("myJsInclude", "myJsFile.js");

EDIT2:
Here's a sample of an include with RegisterStartupScript:

string jsBlock = "<script src='myJsFile.js'></script>";

if (!Page.ClientScript.IsStartupScriptRegistered("myJsInclude"))
   Page.ClientScript.RegisterStartupScript(typeof(string), "myJsInclude", jsBlock, false);

You should add things like language="text/javascript" to the script tag, but for readability I didn't add them.

Sorry... I decided to move my comment to an answer.

I personally add all of my JS to the ScriptManager. It helps lower the number of Http calls that the page has to make.

ScriptManager1.CompositeScript.Scripts.Add(New ScriptReference("~/Page/To/Jquery.js"))

But this is only if you're already using a ScriptManager on your page

Also, if you don't want to add it from CodeBehind, you can do it right in your page.

<ScriptManager>
   <CompositeScript>
      <Scripts>
         <-- your scripts in here -->
      </Scripts>
   </CompositeScript>
</ScriptManager>

So by doing this, you're able to add all of your JS to a single HTTP Request rather than having a bunch of different requests all at once.

Then in the ScriptManager tag, you can add LoadScriptsBeforeUI="false" to have them put to the bottom of the page.

Sorry but that was never the cleanest way to inject script into an asp.net page.

Look at the ClientScript object. There are several methods that will suit your needs without resorting to placeholders.

ScriptManager is a good way to do this, as mentioned above. If you are not using MS Ajax and ScriptManager, then I suggest you write your own control. It should be very simple control at that. Add a public variable List and override RenderContents method to walk through your list of strings and render on the page. Sample code:

public class CustomScriptManager : WebControl
{
    private List<string> scripts = new List<string>();

    public List<string> Scripts
    {
        get { return scripts; }
        set { scripts = value; }
    }

    protected override void RenderContents(HtmlTextWriter writer)
    {
        foreach (string script in scripts)
        {
            writer.Write("<script language=\"JavaScript\" type=\"text/javascript\" src=\"" + script + "\"></script>");
        }
    }
}

PS I haven't verified above code, but I thing you get the idea.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM