21

サイト http://localhost/virtual があるとします。ここで、virtual は仮想ディレクトリです。

JQuery を使用して JavaScript ファイルで定義されている Ajax リクエストがあります。

$.getJSON("/Controller/Action")

これが呼び出されると、クライアントはルート レベル、つまりhttp://localhost/Controller/Actionで URL を見つけようとします 。

チルダ (~) 記号を追加すると、 http://localhost/virtual/~/Controller/Actionになります。

(私がやりたいことをするのであれば) http://localhost/virtual/Controller/Actionに解決する必要があります

これを修正する方法についてのアイデアはありますか?

4

8 に答える 8

25

上記のAkuのヒントは正しく見えましたが、私にとってはうまくいきませんでした. 最後に、私はそれをこのように使用することを考え出しました

<script type="text/javascript">
    var config = {
        contextPath: '<%= @Url.Content("~")  %>'
    };
</script>

そして、私のJavaScriptでは、このように使用します

config.contextPath + 'myAppPath".

したがって、仮想ディレクトリがない場合、これは "/" + "myAppPath" に解決され、仮想ディレクトリの場合、これは "/VirtualPath/" + + "myAppPath" に解決されます。

そして、これは最終的に私のために働きました。

于 2011-09-23T05:19:12.277 に答える
15

このソリューションをうまく使用しました

マスターページに次の要素を配置します

<%= Html.Hidden("HiddenCurrentUrl", Url.Action("Dummy"))%>

メインの JavaScript ファイルでグローバル変数を宣言します

var baseUrl = "";

JavaScript がロードされたら、baseUrl を「HiddenCurrentUrl」の値に設定します。

baseUrl = $("#HiddenCurrentUrl").val();
baseUrl = baseUrl.substring(0, baseUrl.indexOf("Dummy"));

baseUrl を使用する

$.getJSON(baseUrl + "Action")

編集改善されたソリューション

コントローラーで

ViewBag.BaseUrl = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath + "/";

マスター ページで

<script type="text/javascript">
    var YourNameSpace = YourNameSpace || {};
    YourNameSpace.config = {
        baseUrl: "@ViewBag.BaseUrl"
    }
</script> 

baseUrl を使用する

$.getJSON(YourNameSpace.config.baseUrl + "Action")
于 2010-06-30T09:10:22.570 に答える
4

ベース URL を取得する別の方法は次のとおりです。

<script type="text/javascript">
  window.g_baseUrl = '@Url.Content("~")';
</script>

たとえば、SomeName仮想ディレクトリ からアプリを実行する場合、 window.g_baseUrl変数は/SomeName/と等しくなります。

このメソッドの利点は、他のコントローラーでアクションを呼び出すことができることです。

$.getJSON(window.g_baseUrl + "AnotherController/Action") 
于 2011-08-01T10:28:30.917 に答える
2

たぶん、$.getJSON("Controller/Action")そうしますか?

于 2010-01-22T11:13:47.733 に答える
2

アプリケーション ルート パスのチルダ ショートカットは、ASP.NET の特別な機能であり、URL 自体の一部ではありません。したがって、JavaScript からチルダを含む URL を使用しようとしても、サイトのルートは解決されません~。ご覧のとおり、リテラルが表示されるだけです。

アプリケーションのルート パスの値を JavaScript に渡して、URL 自体を構築できるようにする必要があります。私は ASP.NET にはあまり詳しくありませんが、次のようなことができると思います。

<script type="text/javscript">
    var approot= <%= JavaScriptSerializer.Serialize(Request.ApplicationPath) %>;
    ... $.getJSON(approot+'/Controller/Action') ...;
</script>

ページに approot へのリンクがあることがわかっている場合、より簡単な方法はhref、そのリンクのを読み取ることです。

var approot= $('#homepagelink').attr('href');
于 2010-01-22T12:30:31.830 に答える
0

私はこの質問が非常に古いことを知っていますが、私は最近この問題に苦労していて、を使用してそれを解決することができました

  url:'<%=VirtualPathUtility.ToAbsolute("~/Include/cntrols/Data.aspx") %>',

これは私のajax呼び出しでうまく機能します...

于 2012-11-20T14:36:10.500 に答える
0

JS ファイルへの相対パスは、私が見つけた唯一の解決策でした $.getJSON("../Controller/Action")

于 2010-01-24T11:38:28.260 に答える