每当我想以编程方式添加javascript库时,例如jquery,它通常涉及确保页面的页脚有一个placeholder
,然后调用一个代码隐藏方法,该方法将链接到src作为参数并返回htmlgeneric
控件,然后将其添加到此placeholder
。
即使使用.net 4.0,这仍然是最好的方法吗?
答案 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。我还没有验证上面的代码,但我知道你的想法。