代码之家  ›  专栏  ›  技术社区  ›  danyim

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

  •  0
  • danyim  · 技术社区  · 16 年前

    我目前正在转换旧的“Web1.0”代码以满足当前的标准。

    有没有更好的方法来生成和附加客户端脚本,而不是将大量的行附加到StringBuilder,然后通过 ClientScript.RegisterStartupScript(Me.GetType(), "startUpScript", strScript) ?

    有没有其他方法(除了把所有这些放到一个global.js文件中)可以改进这个例子?如果将其包含在main.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 回复  |  直到 16 年前
        1
  •  1
  •   lincolnk    16 年前

    一个好的折衷方法可能是将脚本内容卸载到一个新的js文件中,并从codebhind中包含一个脚本节点。

    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不是我的母语)。

        2
  •  0
  •   Jeroen    16 年前

    是的,你可以在你的项目中包含一个.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);
                    }
    

    注意用.js所在的完整而准确的命名空间替换MyFullNameSpace。如果它不工作,可能.net找不到它,您可以使用reflector打开您的dll并找到作为嵌入资源的.js,这样您就可以知道它所在的确切名称空间。

        3
  •  0
  •   kbrimington    16 年前

    你可以从使用中获得一点里程 AppendLine() 而不是串联 vbCrLf .

    推荐文章