在ASP / VB.NET上生成/注册客户端脚本

时间:2010-08-06 15:18:39

标签: javascript asp.net vb.net

我目前正在转换旧的“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

3 个答案:

答案 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,您可以节省一些时间。