ASP.NETインラインサーバータグ
-
30-09-2019 - |
質問
私のコードは完全に機能していると言って始めたいと思います。これは「それを行うのが最善の方法」のような質問です。
だから私は私の中にこのようなコードを持っています .aspx
ファイル:
function EditRelationship() {
var projects=<%= GetProjectsForEditRelationship() %>;
// fill in the projects list
$('#erProjectsSelect').empty();
for(var i in projects)
$('#erProjectsSelect').append('<option value='+projects[i][0]+'>'+projects[i][1]+'</option>');
var rels=<%= GetRelationshipsForEditRelationship() %>;
// etc
}
繰り返しますが、それは正常に動作しています。問題は、VS2008がこのようなコードをちょっと窒息させ、それが下線を引いていることです <
タグの文字(関連する警告付き)、その後、残りのJavaScriptにコード完了を提供することを拒否します。 また、ドキュメントのフォーマットをもう拒否し、解析エラーが発生します. 。最後の部分は私の最悪の迷惑です。
これらのいくつかを入れることができました eval
Sは推測しますが、Shost Vs Upでレイヤーを追加し、ランタイムのパフォーマンスを追加するだけで馬鹿げているようです。常にオプションではありません(これがオプションではなく信頼ではなく、頭の上部から思い出せません私は奇妙な構造を持っていました)。
だから私の質問は、 これをどのように書くのが一番です (最高の意味が最も少ないことと最大の苦情を意味します)?ない eval
また、AjaxはこのIMOに適合しません。
解決
あなたの目的がvsの苦情を減らすことであり、asp.net 4(静的クライアントIDをサポートする)を実行している場合、おそらく以下のような戦略が良いでしょうか?
- ASPを作成する:hiddenfieldコントロール、clientIdModeを「static」に設定します
- getRelationshipsforedItreationship()の値をページのロードでこのフィールドに割り当てる
- JavaScriptでは、代わりに隠されたフィールドから値を読んで、これを行う方法を知っていると思います。
それはあなたのソリューションよりも多くの仕事であり、あなたはポストバックにいくつかのデータを追加します(あなたが実行した場合)が、それは私が推測する:)と推測するVSの苦情を引き起こしません:)
他のヒント
コードビハンドのページからこれを行うことができます
ClientScript.RegisterArrayDeclaration("projects", "1, 2, 3, 4");
またはJSONのようなものを構築するためにあなたはそれを書き出すことができます
ClientScript.RegisterClientScriptBlock(GetType(), "JSONDeclarations", "your json stuff");
アップデート 私のコメントに基づいて
<script id="declaration" type="text/javascript">
var projects=<%= GetProjectsForEditRelationship() %>;
var rels=<%= GetRelationshipsForEditRelationship() %>;
</script>
<script type="text/javascript">
function EditRelationship() {
// fill in the projects list
$('#erProjectsSelect').empty();
for(var i in projects)
$('#erProjectsSelect').append('<option value='+projects[i][0]+'>'+projects[i][1]+'</option>');
}
</script>
私はVS2008をテストするためにインストールしていないので、これを一粒の塩で服用しますが、このようなことを試しましたか?
var projects = (<%= GetProjectsForEditRelationship() %>);
そのようなものは、JavaScriptパーサーをだまして、表現の内容を無視している可能性があります。
その価値のために、VS2010は元のコードスニペットを正しく解析し、強調します。
これをVS2010に移動するオプションですか?私はあなたのコードをコピーして貼り付けましたが、IDEはそれを正しく解釈しました。
最良の解決策は、JavaScriptを別のファイルに入れて、これを完全に回避することです。この特定の機能については、サーバー側の作業を行っています。 CodeBehindに動的に追加するオプションのリストを作成し、それらを隠されたDivに入れてから、既にレンダリングされたHTMLからjQueryに追加してもらってみませんか?
この方法で多くのJavaScriptを実際に動的に作成したい状況がある場合は、CodeBehindでScriptManagerを使用してスクリプトとして必要な変数を設定して登録することを検討してください。
ScriptManager.RegisterClientScript("projects = " + GetProductsForEditRelationship());
(基本的に、それは完全な構文ではなく、コンテキストに依存します)。次に、機能の「プロジェクト」を参照してください。
(編集)
これを大規模に行うための少しクリーンな方法は、CodeBehindでこのように必要なすべてを設定します。
string script = "var servervars = {" +
"GetProductsForEditRelationship: " + GetProductsForEditRelationship() +
"GetRelationshipsForEditRelationship: " + GetRelationshipsForEditRelationship() +
"}"
そして、次のようなすべてを参照してください:
servervars.GetProductsForEditRelationship
もちろん、これをたくさん行うと、スクリプトの構築を自動化するクラスを作成できます。