2

JSONデータを返すASP.NETMVCアクションがあります。私のクライアントはjQueryのajax関数を使用してこのデータを取得し、画面に表示します。JavaScriptでコントローラーアクションへの絶対パスを使用します。

$.ajax({
    url: '/Home/Load',
    type: 'post',
    dataType: 'json'
})

問題は、一部の環境では、前面に仮想ディレクトリを追加するため、URLは実際には/Path/To/App/Home/Loadです。デプロイするたびに更新する必要がないようにJavaScriptを作成する方法があるかどうか疑問に思っています。のような相対URLを使用することもできます../Home/Indexが、JavaScriptコードを移動することがあります。MVCのバンドラーを使用する場合も、事態はさらに複雑になります。~キャラクターがうまくいったらいいのにと思います。

4

2 に答える 2

4

これが私のやり方です:

メインビューに次の行を追加します(ここではRazor構文を使用)。

<script type="text/javascript">
    var appBaseUrl = "@Url.Content("~")";
</script>

次に、Javascriptで:

$.ajax({
    url: appBaseUrl + 'Home/Load',
    type: 'post',
    dataType: 'json'
})
于 2013-02-28T15:16:12.030 に答える
2

URLをajaxリクエストに関連する要素に入れることができます:

<div id="mydiv" data-url="@Url.Action("Load", "Home")">Click me to load ajax request!</div>

次に、JSコードを次のように変更します。

$.ajax({
    url: $('mydiv').data('url'), // Could be $(this).data('url') if clicking to load
    type: 'post',
    dataType: 'json'
})

これの利点は、MVCルーティングを引き続き使用するため、カスタムルートが引き続き機能することです。

于 2013-02-28T15:17:00.430 に答える