在asp.net中将javascript添加到页脚的“最新”方式

时间:2010-02-14 14:26:00

标签: c# asp.net javascript

每当我想以编程方式添加javascript库时,例如jquery,它通常涉及确保页面的页脚有一个placeholder,然后调用一个代码隐藏方法,该方法将链接到src作为参数并返回htmlgeneric控件,然后将其添加到此placeholder

即使使用.net 4.0,这仍然是最好的方法吗?

4 个答案:

答案 0 :(得分:7)

我认为更好的方法是使用RegisterStartupScript方法:
http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx

在你的情况下更好的RegisterClientScriptInclude:
http://msdn.microsoft.com/en-us/library/kx145dw2.aspx

修改
这是RegisterClientScriptInclude的示例:

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

<强> EDIT2:
以下是RegisterStartupScript包含的示例:

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

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

您应该在script标签中添加language =“text / javascript”等内容,但为了便于阅读,我没有添加它们。

答案 1 :(得分:3)

抱歉......我决定将我的评论转到答案。

我个人将所有JS添加到ScriptManager中。它有助于降低页面必须进行的Http调用次数。

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

但这只是在您已经在页面上使用ScriptManager时

此外,如果您不想从CodeBehind添加它,您可以在页面中直接添加。

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

通过这样做,您可以将所有JS添加到单个HTTP请求中,而不是一次性拥有大量不同的请求。

然后在ScriptManager标记中,您可以添加LoadScriptsBeforeUI="false"以将它们放在页面底部。

答案 2 :(得分:1)

很抱歉,但这绝不是将脚本注入asp.net页面的最简洁方法。

查看ClientScript对象。有几种方法可以满足您的需求,而无需借助占位符。

答案 3 :(得分:1)

如上所述,ScriptManager是一种很好的方法。如果您没有使用MS Ajax和ScriptManager,那么我建议您编写自己的控件。它应该是非常简单的控制。添加一个公共变量List并覆盖RenderContents方法,以遍历您的字符串列表并在页面上呈现。示例代码:

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>");
        }
    }
}

P.S。我还没有验证上面的代码,但我知道你的想法。