30

次のような状況があります。

初めての MVC Asp.Net アプリケーションを開発しました。次のアドレスのサーバーで実行されます

http://localhost:59441/

このようなJQuery Post Methodsをいくつか書きました

  $.ajax({
        type: "POST",
        url: "/CeduleGlobale/UpdateCheckBox", ...

CeduleGlobale は ControllerName で、UpdateCheckBox は methodName です。

アプリケーションをtestServerに配置すると、VirtualDirectoryに配置されました

したがって、アプリケーションは今

http://testServer/JprApplication/

指定するポートとアプリケーション名はもうありません

テストを開始したとき、JQuery Post 呼び出しが機能しなくなったことにすぐに気付きました...

それらを変更したので、URLは次のとおりです

/JprMvc/CeduleGlobale/UpdateCheckBox

問題は2倍です。

  1. IIS Express では仮想ディレクトリを指定できないため、開発マシンでのテストが難しくなります。
  2. アプリケーションが本番環境でどのような名前になるかわからないため、JQuery で仮想ディレクトリ名をハードコーディングするのは好きではありません。そのため、アプリケーションを本番環境にインストールする前にスクリプトを変更する必要があります。

これを単純化するための基本的なことが欠けていると確信しています。

ありがとう

4

7 に答える 7

51

JavaScript を実際に配置する場所 (View 内または別の JS ファイル内) に応じて、いくつかのオプションがあります。

オプション 1 - ビュー内

Html ヘルパーを使用してリンクを生成するだけです

<script type="text/javascript">
   $(function(){
        $.ajax({
           type: "POST",
           url: "@Url.Action("UpdateCheckBox", "CeduleGlobale")"
        });
   });
</script>

オプション 2 - スタンドアロン JS ファイル

通常、ページごとに、そのページのハンドラーを設定する関数があります。したがって、次のようなことができます。

意見

<script type="text/javascript">
    $(function(){
        SetOrderPage('@Url.Action("UpdateCheckBox", "CeduleGlobale")');
    });
</script>

スタンドアロン JS ファイル

function SetOrderPage(ajaxPostUrl){
       $.ajax({
           type: "POST",
           url: ajaxPostUrl
       )};
}

オプション 3 - スタンドアロン JS ファイル 方法 2

サイトルートであるJSファイルにグローバル変数を含めることができます。ここでの欠点は、各アクション メソッド パスを手動で作成する必要があることです。各ページで、サイト ルート グローバル変数を次のように設定できます。

スタンドアロン JS ファイル

var siteRoot;

意見

<script type="text/javascript">
    siteRoot = '@Request.ApplicationPath';
</script>

スタンドアロンの JS ファイルでは Razor 構文を使用できないことに注意してください。Razor/MVC/.NET にサイト パスまたは URL ルートを動的に提供させるのが最善だと思います。サイト/仮想ディレクトリ間を移動するときに発生する可能性のある間違いを実際に減らすことができるからです。

于 2013-08-20T15:02:07.803 に答える
1

私はこれが古い投稿であることを知っています。しかし、私は同じ問題を抱えていて、ここに行き着きました。そして、 UrlHelper.Actionメソッドでその問題を修正することができました。このようなものを使用する必要があります。(この特定のソリューションはビュー内で機能することに注意してください。)

url: "@Url.Action("UpdateCheckBox", "CeduleGlobale")",

お役に立てれば。:)

于 2014-09-17T10:31:55.153 に答える