5

複数のページで呼び出す別の「.js」ファイルにAjaxポストコールが書き込まれています。私のコードは次のようになります:

    $.ajax({
               url: '/MyVirtualDirectory/Controller/Action',
               type: 'POST',
               dataType: 'json',
               ....
               ....
              })

サーバーの仮想ディレクトリを変更するたびに、Ajax呼び出しを機能させるために「URL」のコードを変更する必要があります。

IISの「仮想ディレクトリ」名からコードを独立させる方法はありますか?

私のアプリケーションはMVC3です。

4

3 に答える 3

14

説明

Url.Actionメソッドを使用する必要があります。しかし、あなたの場合、別の js ファイルでは、このメソッドにアクセスできません。したがって、ビュー内の各 URL に対して JavaScript 変数を作成します。次に、この変数を js ファイルで使用できます。

UrlHelper.Action メソッド- アクション メソッドへの完全修飾 URL を生成します。

サンプル

あなたの見解

<script type="text/javascript">
    var myUrl = '@Url.Action("actionName", "controllerName")';
</script>

<script type="text/javascript" src="yourJsFile.js"/>

あなたのjsファイル

$.ajax({
       url: myUrl,
       ....
})

アップデート

もう 1 つの方法は、ビュー内の非表示フィールドに URL を保存し、js ファイル内の非表示フィールドの値を取得することです。

詳しくは

于 2012-04-25T16:17:55.417 に答える
1

私は最終的に部分的な回避策を見つけました。私の .js ファイルでは、次のような汚いコーディングを行いました。

 var Path = location.host;
 var VirtualDirectory;
 if (Path.indexOf("localhost") >= 0 && Path.indexOf(":") >= 0) {
 VirtualDirectory = "";

 }
 else {
 var pathname = window.location.pathname;
 var VirtualDir = pathname.split('/');
 VirtualDirectory = VirtualDir[1];
 VirtualDirectory = '/' + VirtualDirectory;
 }
$.ajax({
   url: VirtualDirectory/Controller/Action,
   ....})

基本的な考え方は、URL で localhost とポート番号を確認することです。両方が存在する場合は、ローカル マシンでデバッグしているため、URL に仮想ディレクトリは必要ありません。ホストされたバージョンを実行している場合、URL に localhost とポート番号は含まれません (ポート 80 でホストしている場合)。

このようにして、URL のデバッグ中にローカル マシンで実行すると、コントローラー/アクションのみになり、URL をホストしている間は、VirtualDirectory/Action/Controller になります。今はうまくいきます。

しかし、他に簡単な方法があれば投稿してください。

于 2012-04-26T09:36:58.430 に答える