2009-05-20 38 views
5

使用C#進行ASP.NET和MOSS開發時,我們經常需要將JavaScript嵌入到我們的C#代碼中。要做到這一點,似乎有兩個思想盛行學校:如何將其他編程語言嵌入代碼中?

string blah = "asdf"; 
StringBuilder someJavaScript = new StringBuilder(); 
someJavaScript.Append("<script language='JavaScript' >"); 
someJavaScript.Append("function foo()\n"); 
someJavaScript.Append("{\n"); 
someJavaScript.Append(" var bar = '{0}';\n", blah); 
someJavaScript.Append("}\n"); 
someJavaScript.Append("</script>"); 

思想的其他學校是這樣的:

string blah = "asdf"; 
string someJavaScript = @" 
    <script language='JavaScript' > 
    function foo() 
    { 
     var bar = '" + blah + @"'; 
    } 
    </script>"; 

難道還有比這兩種方法的更好的辦法?我個人喜歡第二個,因爲你可以看到整個JavaScript部分(或其他語言塊,無論是SQL還是你有什麼),它還有助於在另一個編輯器之間複製該特定語言的代碼。

編輯:
我應該提到最終目標是在最終的網頁中使用格式化的JavaScript。

我還更改了示例以顯示與生成的代碼的交互。

+0

我一直在問這個問題。而第二個看起來更清潔,接下來嘗試控制的動態命名...然後它變得更醜,因爲您必須使用Control.ClientID – 2009-05-20 18:51:09

+0

document.getElementById(「」「+ String.Format(」{0} _ {1}「) ,base.ClientID,「foobar」)+ @「」「).... – 2009-05-20 18:55:36

回答

7

第二顯然是方式,方法,更清晰。做第一個事情根本沒有任何理由。

我會,但是,它延伸到這一點:

string someJavaScript = string.Format(@" 
    <script language='JavaScript' > 
     function foo() 
     { 
      var bar = '{0}'; 
     } 
    </script>", blah); 

如果你有幾件事情要堅持字符串內,String.Format方法將成爲而非直列串聯更具可讀性。

3

如何將JavaScript作爲資源部分添加到文件中,以便它可以從可執行文件的資源部分作爲(嵌入)腳本加載?

+0

是的..這只是使它很難與之合作。他們已經從與MOSS合作的劣勢開始,最好在大多數情況下做這樣的事情。 – 2009-05-20 18:52:54

+0

如果您仔細組織代碼,則不是。我的經驗是,通常只有幾個ID,並且必須從服務器端代碼中提取。這些可以像上面那樣嵌入初始化器中。如果你想格式化和可讀性,使用JS文件。 – Ishmael 2009-05-20 19:01:53

+0

@Ishmael,你能提供一個在你的資源中使用初始值設定項的例子嗎? – 2009-05-20 19:29:09

1

字符串文字有一個原因:可讀性。

(性能是一個不是問題的問題,這是MOSS我們談論的是...)

5

第二種方式,雖然使用外部文件好得多,並且允許對應用程序進行修改而不用重新編譯它。

您還需要一個很好的,可讀的方式來插入變量。最簡單的方法是使用string.Format,但每個變量都是{0}或{1},所以這可能是不可讀的。

如何:

public static string Insert(object dictionary, string into) 
{ 
    foreach (PropertyInfo property in dictionary.GetType().GetProperties()) 
     into = into.Replace("<%" + property.Name + "%>", 
          property.GetValue(dictionary, null).ToString()); 

    return into; 
} 

然後,你可以這樣做:

string js = Insert(new { divList, url }, 
        @"jQuery(document).ready(function(){ 
         jQuery('#<%divList%>').jqGrid({ 
          url:'<%url%>', 
          datatype: 'json', 
          mtype: 'GET', ... etc..."); 

或者如果腳本是在外部文件:

string js = Insert(new { divList, url }, File.ReadAllText("someFile.js")); 

您可以傳遞任何對象,它的屬性可以通過ASP風格的轉義語法直接訪問。

上面給出的實現並不是非常有效,顯然,它很短。

另一種可能性是編寫一個返回JavaScript的.aspx頁面,然後可以用<script>引用將它包含在HTML頁面中。您可以將set the ContentType of the page設置爲application/x-javascript

這將讓你使用普通的ASP.NET <%= %>標籤來修改它,並且已經是一個快速,強大的外部文件解決方案,當你編輯腳本時,它將自動編譯。

1

我們爲此目的編寫了一個庫,它提供了一種在C#代碼中嵌入JavaScript的流利語法。你可以閱讀更多關於它here

總之,你的例子可以寫成:

var function = JS.Function("foo").Do(
    JS.Var(JS.Id("bar").AssignWith(blah))); 
string someJavaScript = "<script>" + function + "</script>"; 

其一,它會確保該嗒嗒變量的內容被正確引用,如果它包含特殊字符,例如。

相關問題