2009-06-04 46 views
2

我需要在服務器上生成JavaScript。我可以通過使用ASPX頁面來模板JavaScript來做到這一點,但我收到警告,並且我沒有從我希望的語法高亮中受益。有沒有辦法告訴.Net環境/ Visual Studio某個ASPX頁面應該輸出非HTML文本?使用ASP.Net中的模板生成JavaScript

原因是本地化。我的本地化字符串來自服務器,我需要這些在頁面上的JavaScript結構。我想出的最簡單的方法是有一個JS文件(我現在稱之爲l18n.js),它定義了JSON對象中的本地化字符串。

l18n = { 
    OK: <%= GetString("OK") %>, 
    Cancel: <%= GetString("Cancel") %>, 

    ConfirmDialog: { 
     Title: <%= GetString("ConfirmTitle") %>, 
     Message: <%= GetString("ConfirmMessage") %> 
    } 
    // .. etc. 
} 

這讓我使用本地化的字符串在UI

var okButton = $('<button>' + l18n.OK + '</button>') 

的其他部位但正如所說,只是拋出JavaScript的一個ASPX頁面內,l18n.js.aspx,導致警告和不提供語法高亮。有沒有更好的方法可以至少擺脫這個警告?目前一個是

代設計師文件的失敗:從HRESULT異常:0x80042929

而如果它的事項該項目是建立在NET 2.0的頂

澄清

語言不是用戶選擇的,所以它不應該一直改變,我應該能夠使用語言值作爲ETag,所以緩存不應該是一個大的問題UE。從瀏覽器的角度來看,我認爲模板JS是一個靜態文件,就像其他文件一樣。我只是不想聲明〜10靜態JS文件,如果我可以自動化它。

回答

2

一個ASPX是一個ASP.NET表單。它預計代表一個Web窗體,用戶可以與ASPX中的其他代碼進行交互。因此ASPX生命週期代表了很多。

對於像JS這樣的原始輸出,你應該使用一個沒有所有這些表單開銷的ASHX。

在你的具體情況下,我會研究創建一組可以序列化爲JSON的類。發送序列化的JSON作爲ASHX的輸出。

-1

您可以製作一個由腳本塊組成的控件(.ascx)?

要獲得jQuery的智能感知,做這樣的事情(它是asp.net的MVC但類似的應得分級asp.net工作的東西):

<% if (false) 
    { %> 

<script src="../../Static/Scripts/jquery-1.3.2.js" type="text/javascript"></script> 

<% } %> 
+0

這可能會工作,但這不會迫使我內聯HTML體內的JavaScript?無論如何,這至少會迫使我內嵌JavaScript,而不是因爲某些個人喜好而想要做的事情。很高興知道有一種解決方案,以防從瀏覽器的角度無法將JavaScript以完全獨立的文件聲明! – 2009-06-04 10:11:59

+0

我明白你的觀點。我沒有從你的問題中瞭解到這一點。好主意,但當有動態數據(應該是)時,請注意瀏覽器緩存.js文件。 – 2009-06-04 10:14:11

+0

我認爲ropstah的回答很不錯,因爲瀏覽器緩存javascript並不重要。 – 2009-06-04 10:14:47

1

您還可以在腳本塊中每頁頂部的'全局'變量(常量)中加載所有當前頁面的語言元素。

var LANG_OK = 'ok string'; 
var LANG_CANCEL = 'cancel string'; 
var LANG_CONFIRM_TITLE = 'title string'; 
var LANG_CONFIRM_MESSAGE = 'message string'; 

這使動態部分遠離您的JavaScript文件。這意味着JavaScript文件是靜態的,就像它們應該是。

更新

你可以考慮創建基於我的解決方案上面的每一種語言的JavaScript庫。

  • language_EN.js
  • language_NL.js
  • language_FR.js

這意味着你只需要選擇頁面中包含哪些文件:

<% Response.Write "<script type='text/javascript' src='/js/language_" & User.LanguageCode & ".js'></script>" %>