2010-08-06 68 views
0

我目前正在轉換舊的「Web 1.0」代碼以符合當前的標準。在ASP/VB.NET上生成/註冊客戶端腳本

有沒有更好的方式來生成和附加客戶端腳本,而不是將過多的行添加到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 

回答

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

0

是的,你可以在你的項目中包含一個.js文件。設置它的生成操作(右鍵單擊項目瀏覽器中的文件),以嵌入的資源

例如: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); 
       } 

謹防與.JS位於其中的完整,準確的命名空間,以取代MyFullNameSpace。如果它不工作可能.net無法找到它,你可以使用反射器來打開你的DLL,並找到.js作爲嵌入式資源,所以你會知道它的確切名稱空間。

我總是這樣做服務器控件,但我的形象也可以在Web應用程序項目中完成。

+0

我很清楚我可以添加一個.js文件到一個項目;這只是因爲我們的.js文件已經陷入其他功能,所以我正在尋找替代方案,只有當頁面(在特定條件下)需要它時,才能動態地向頁面添加腳本。 – danyim 2010-08-06 15:26:55

+0

因此,您製作serveral.js文件並根據需要註冊它們? 您可以從代碼中將參數傳遞給.js文件中的函數。 – Jeroen 2010-08-06 15:28:55

0

使用AppendLine()代替連接vbCrLf可以獲得一點點的里程數。

+0

感謝您的提示。我只是在複製和粘貼舊代碼。 – danyim 2010-08-06 15:28:12