0

私はレガシー アプリケーションで作業しており、一部の JS コードを別の JS ファイルに移動したいと考えています。

これを行うには、コードの一部を屈折させる必要があります。@Url.ContentHTML のデータ属性にステートメントを入れることができます。

しかし、このコード行をどのように置き換えるのでしょうか?

var array = @Html.Raw(Json.Encode(ViewBag.JobList));

別の JS ファイルでは意味がわかりません@Html.Raw

4

4 に答える 4

2

そのようなサーバー側のコードは、別の JavaScript ファイルでは実行できません。このような問題に対する私の解決策は、onload イベントで実行される短い JavaScript 部分を頭に持つことです。そこで、別の JavaScript ファイルで使用できる変数を設定できます。

頭の中で:

array = @Html.Raw(Json.Encode(ViewBag.JobList));

別のjavascriptファイルで:

var array;

次に、別のjavascriptファイルで、必要なことは何でも配列で行うことができます。

于 2013-08-13T14:08:28.700 に答える
1

また、 MelanciaUKの提案に従います。

JavaScript ファイルで、コードを関数内に配置します。

function MyViewRefactored( array ){
  ... your code ...
}

ビューで、最小限の javascript ブロックを残します。

 <script>
     var array = @Html.Raw(Json.Encode(ViewBag.JobList));
     MyViewRefactored( array );
 </script>
于 2013-08-13T15:27:55.550 に答える
1

データは、ViewBag.JobListHTML ページの生成時にのみ認識されます。これを外部の JavaScript ファイルに含めるには、再計算ViewBag.JobListして動的 JavaScript ファイルの一部として提供する別の ASP.NET リソースが必要です。これはかなり非効率的です。

代わりに、URL で行っていることを行います。DOM を介してデータを渡します。スクリプト ブロックの代わりに通常の DOM に書き込んでいる場合、生の出力はもう必要ありません (*)。通常の HTML エスケープは問題ありません。

<script
    id="do_stuff_script" src="do_stuff.js"
    data-array="@Json.Encode(ViewBag.JobList)"
></script>

 ...

var array = $('#do_stuff_script').data('array');

// jQuery hack - equivalent to JSON.parse($('#do_stuff_script').attr('data-array'));

</script(実際には、生の出力は、使用している JSON エンコーダーとエスケープすることを選択したかどうかによって、セキュリティ バグであった可能性があります\u003C/script。十分に理解された HTML エンコーディング要件を使用して HTML に書き込むことは、良い考えです。このような問題も回避します。)

于 2013-08-13T14:31:00.957 に答える