我目前正在转换旧的“Web 1.0”代码以符合当前标准。
是否有更好的方法来生成和附加客户端脚本,而不是将大量的行附加到StringBuilder,然后通过ClientScript.RegisterStartupScript(Me.GetType(), "startUpScript", strScript)
将其注册到页面?
除了将所有这些放入全局.js文件之外,还有其他方法可以改进这个例子吗?如果将这个包含在主.js文件中是“最佳实践”替代方案,那么为什么呢?
Dim lsbScript As New Text.StringBuilder
lsbScript.Append(vbCrLf)
lsbScript.Append("<script language=""javascript>""" & vbCrLf)
lsbScript.Append("<!--" & vbCrLf)
...
lsbScript.Append("//-->" & vbCrLf)
lsbScript.Append("</SCRIPT>" & vbCrLf)
If Not ClientScript.IsStartupScriptRegistered("someScript") Then
ClientScript.RegisterStartupScript(Me.GetType(), "someScript", lsbScript.ToString)
End If
答案 0 :(得分:1)
良好的中间地带可能正在将脚本内容卸载到新的js文件,并包括来自代码隐藏的脚本节点。
protected void Page_Load(object sender, EventArgs e) {
bool someCondition = Whatever();
if (someCondition)
{
System.Web.UI.HtmlControls.HtmlGenericControl script;
script = new System.Web.UI.HtmlControls.HtmlGenericControl("script");
script.Attributes["src"] = "myscript.js";
this.Controls.Add(script);
}
}
这只会将节点放在页面末尾。或者,您可以在页面上放置占位符控件,并将新的HtmlGenericControl添加到该页面。
(抱歉,vb不是我的母语)。
答案 1 :(得分:0)
是的,您可以在项目中包含.js文件。将它的Build Action(右键单击项目资源管理器中的文件)设置为Embedded Resource
例如:common.js
在服务器控件的命名空间之上(或者你需要的命名空间):
[assembly: System.Web.UI.WebResource(
"MyFullNameSpace.Common.js",
"text/javascript", PerformSubstitution = true)]
OnPreRender活动:
if (!Page.ClientScript.IsClientScriptIncludeRegistered("Common"))
{
string url = Page.ClientScript.GetWebResourceUrl(this.GetType(), "MyFullNameSpace.Common.js");
Page.ClientScript.RegisterClientScriptInclude("Common", url);
}
请注意将MyFullNameSpace替换为.js所在的完整且准确的命名空间。如果它不起作用,.net找不到它,你可以使用反射器打开你的dll并找到.js作为嵌入式资源,这样你就会知道它所在的确切命名空间。
我总是从服务器控件执行此操作,但我想也可以在Web应用程序项目中完成。
答案 2 :(得分:0)
使用AppendLine()
而不是连接vbCrLf
,您可以节省一些时间。