1

私のコードは完全に機能しているということから始めたいと思います。これは「それを行うための最善の方法」のような質問です。

だから私は私の.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のコード補完を提供することを拒否していることです。また、ドキュメントのフォーマットを拒否し、解析エラーが発生します。最後の部分は私の最悪の迷惑です。

これらのいくつかをsに入れることはできevalますが、VSをシャットダウンするためだけにレイヤーを追加したり、実行時のパフォーマンスが低下したりするのはちょっと馬鹿げているようです。オプションではありませんでしたが、私は奇妙な構造を持っていたと信じてください)。

だから私の質問は、これをどのように書くのが最善ですか(最も良いとはVSの苦情が最も少ないことを意味します)?どちらevalもajax呼び出しもこのimoに適合しません。

4

5 に答える 5

2

コードビハインドでページからこれを行うことができます

ClientScript.RegisterArrayDeclaration("projects", "1, 2, 3, 4");

または JSON のようなものを作成するには、それを書き出すことができます

ClientScript.RegisterClientScriptBlock(GetType(), "JSONDeclarations", "your json stuff");

UPDATE私のコメントに基づいて

<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>
于 2011-01-07T15:27:54.850 に答える
2

VS の苦情を減らすことが目的で、asp.net 4 (静的クライアント ID をサポート) を実行している場合は、次のような戦略の方がよいでしょうか?

  1. ASP:HiddenField コントロールを作成し、ClientIdMode を「Static」に設定します。
  2. ページ読み込み時に GetRelationshipsForEditRelationship() の値をこのフィールドに割り当てます
  3. あなたのJavaScriptでは、代わりに隠しフィールドから値を読んでください。これを行う方法を知っていると思います。

それはあなたのソリューションよりも多くの作業であり、ポストバックにいくつかのデータを追加します(実行する場合)が、私が推測するVSの苦情は発生しません:)

于 2011-01-07T15:28:01.160 に答える
0

テスト用のVS2008をインストールしていないので、これを一粒の塩で取ってください。しかし、このようなことを試したことはありますか?

var projects = (<%= GetProjectsForEditRelationship() %>);

そのようなものは、JavaScriptパーサーをだまして式の内容を無視させる可能性があります。

VS2010は、元のコードスニペットを正しく解析して強調表示します。

于 2011-01-07T15:36:57.280 に答える
0

これをVS2010に移動するオプションはありますか?コードをコピーして貼り付けたところ、IDEが正しく解釈しました。

于 2011-01-07T15:37:29.183 に答える
0

最善の解決策は、javascript を別のファイルに入れ、これを完全に回避することです。この特定の機能については、サーバー側の作業を行っています。コードビハインドで動的に追加する予定のオプションのリストを作成し、非表示の div に配置してから、レンダリング済みの HTML から jQuery にそれらを追加させてみませんか?

この方法で本当に多くの JavaScript を動的に作成したい状況がある場合は、コード ビハインドで ScriptManager を使用して、必要な変数をスクリプトとして設定し、登録することを検討してください。そうすれば、インライン スクリプトをエスケープする必要はありません。

ScriptManager.RegisterClientScript("projects = " + GetProductsForEditRelationship());

(基本的に、これはコンテキストに依存する完全な構文ではありません)。次に、関数で「プロジェクト」を参照します。

(編集)

これをより大規模に行うための少しクリーンな方法は、コードビハインドで次のように必要なものをすべて設定することです。

string script = "var servervars = {" +
  "GetProductsForEditRelationship: " + GetProductsForEditRelationship() + 
  "GetRelationshipsForEditRelationship: " + GetRelationshipsForEditRelationship() +
"}"

次のようなすべてを参照してください。

servervars.GetProductsForEditRelationship

もちろん、これを頻繁に行う場合は、スクリプトの作成を自動化するクラスを作成できます。

于 2011-01-07T15:29:09.437 に答える