2009-06-04 10 views
2

私はサーバー上でJavaScriptを生成する必要があります。 JavaScriptを使用してASPXページを使用してこれを行うことはできますが、警告が表示されていますが、構文のハイライト効果はありません。 .Net環境/ Visual Studioに特定のASPXページがHTML以外のテキストを出力すると伝える方法はありますか?ASP.Netのテンプレートを使用したJavaScriptの生成

理由はローカライズです。私のローカライズされた文字列は、サーバーから来て、私はページ上のJavaScript構造体でこれらを必要とします。私が思いつく最も簡単な方法は、JSONオブジェクトのローカライズされた文字列を定義する1つのJSファイル(今のところl18n.jsと呼ぶ)です。

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

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

これが言ったように私はちょうどASPXページ内のJavaScriptを投げ、UI

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

の他の部分でローカライズされた文字列を使用することができます。しかし、l18n.js.aspx、警告をもたらし、構文のハイライトは提供されません。少なくとも警告を取り除く良い方法はありますか? HRESULTからの例外:現在の1は、デザイナーファイルの

生成が失敗した0x80042929

を、ケースには、プロジェクトが.NET 2.0

明確化

の上に構築された事項

言語はユーザーが選択したものではないので、常に変更する必要はありません。また、ETagとして言語の値を使用できるようにして、キャッシュはissの大きなものであってはなりませんue。ブラウザの観点から見ると、私はテンプレートJSを静的ファイルとみなしています。私はそれを自動化することができれば〜10の静的なJSファイルを別々に宣言したくないだけです。

答えて

2

アンASPXは、ASP.NETフォームです。これは、ユーザーがASPXでさらにコードを実行することと対話できるWebフォームを表すことが期待されます。したがって、ASPXライフサイクルはこれの多くを表しています。

JSなどの生の出力では、このフォームオーバーヘッドのすべてを持たないASHXを使用する必要があります。

具体的には、JSONとしてシリアル化できる一連のクラスを作成することになります。シリアル化されたJSONをASHXの出力として送信します。

+0

大井! JSONのシリアライゼーションはまったく考えられませんでした。 .Net 2.0でこれを行うための便利なライブラリを見つけて、それがどのように機能するか見てみる必要があります。そして私はASPXがFormsを表現することになっていることを知っています。これが私が個人的にASP.Netを嫌う理由です。 :|あまりにもCOM相互運用性などの他の多くのオプションがありません。シリアライズの仕組みを教えてあげます。 –

+0

なぜASPXは特定の意味を持っているので、ASP.NETを嫌うのかわかりません。これはおそらく、ASPXファイルが従来のASPのASPファイルと精神的に同等であると考えられているという誤解です。 ASP.NETにはこのような同等性がありません。非HTMLの生の出力を生成するには.ashxが正しいツールです。静的コンテンツはサポートされていないため、<% %>マークアップしてください。 IMOこれは良いことです。 – AnthonyWJones

+0

私はすべてのページを「フォーム」とみなし、抽象化ASP.Netが提供するものが非常に漏れやすいとは思わない。私はASP.Netがそれが意味するものにとっては悪いことだと言っているのではないが、私は一般的なWeb開発では「すべてが形式だ」態度が間違っていると感じている。 ASPXに特定の意味があることは嫌いではありません。ASP.Netには、フォーム以外のHTMLページを設計するときに "フォーム"コンストラクトを使用する他のテンプレート可能なコンストラクトは存在しません。 –

-1

スクリプトブロックで構成されたコントロール(.ascx)を作成できますか?

は、(それがasp.netのMVCあまりにもasp.netをクラス分けのために働く必要があります似たようなのためです)、jqueryのインテリセンスを取得し、このような何かをするには、次の

<% if (false) 
    { %> 

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

<% } %> 
+0

このうまくいかないかもしれませんが、これはHTML本体のJavaScriptをインライン展開するよう強制しませんか?いずれにしても、少なくとも個人的な好みではなく、私がしたいと思うJavaScriptをインライン化することを余儀なくされます。 JavaScriptをブラウザの観点から完全に別のファイルに宣言する方法がない場合に備えて、解決策があることを知っておくとよいでしょう! –

+0

私はあなたのポイントを見ます。私はあなたの質問からそれを捕まえていませんでした。良いアイデアですが、そこに動的データがある場合は.jsファイルをキャッシュするブラウザに注意してください。 –

+0

私はropstahの答えがかなり良いと思う。それは、ブラウザがJavaScriptをキャッシュするのに関係ないからだ。 –

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>" %> 
+0

良いアイデア。私のプロジェクトの1つでこれを使用します。 +1! –

+0

ローカリゼーションの主要なソースであれば言語リポジトリを選んだのですが、ローカライズされた文字列がWebアプリケーションとネイティブアプリケーションで共有されているため、ローカライズされた文字列をプライマリソースから取り出すために使用できる動的なJavaScriptについて尋ねました。各ページのスクリプトブロックはこれにはより適していますが、ブラウザが読み込む新しいページにそれぞれ含まれているため、膨大なオーバーヘッドが発生します。 –