3

ASP.NETMVC3アプリケーションを次のようなURLに公開しています。

http://servername.com/Applications/ApplicationName/

私のコードでは、次のようなjqueryajaxリクエストを使用しています。

$.get(('a/b/c'), function (data) {}, "json");

アプリケーションをローカルで実行すると、ローカルページが「/」(localhost/a/b/c)で終わるため、ajaxリクエストは正しいページ(MVCルート)に直接移動します。

ただし、に公開するhttp://servername.com/Applications/ApplicationName/と、末尾の「/」が常に表示されるとは限りません。URLはである可能性がありますhttp://servername.com/Applications/ApplicationName。これにより、ajaxリクエストがロードを試行しますhttp://servername.com/Applications/ApplicationNamea/b/cが、明らかな理由で失敗します。

末尾のスラッシュを追加するためにURLを書き直すことはすでに検討しましたが、A)うまくいかなかった、B)問題の解決策としては不十分であり、javascriptのURLを機能するように構成したほうがよいと思いますローカルフォルダの設定に関係なく適切に。

「../a/b/c」と「/a/ b / c」を試しましたが、どちらも機能していないようです。

助けてくれてありがとう!

4

3 に答える 3

11

個人的には、次のようなビューでサーバーの相対URLのグローバル変数を使用する傾向があります。

var BASE_URL = '@Url.Content("~/")';

次に、次のようなことができます:

$.get(BASE_URL + 'a/b/c'), function (data) {}, "json");

完全にグローバルにしたい場合は、代わりに/Views/Shared/_Layout.cshtmlに追加できます。

于 2012-05-24T14:50:57.040 に答える
3

同じ問題が発生し、MVCUrlヘルパーメソッドUrl.Actionとの機能を反映した2つのJavaScript関数を作成することになりUrl.Contentました。関数は_Layout.cshtmlファイルで定義されているため、すべてのビューで使用でき、アプリケーションがローカルホストのルートにあるかサーバーのサブフォルダーにあるかに関係なく機能します。

<script type="text/javascript">
    function UrlAction(action, controller) {
        var url = ('@Url.Action("--Action--","--Controller--")').replace("--Action--", action).replace("--Controller--", controller);
        return url;
    }

    function UrlContent(url) {
        var path = "@Url.Content("~/--file--")";
        path = path.replace("--file--", url.replace('~/', ''));
        return path;
    }
</script>

これらは次のように呼び出すことができます:

var url = UrlAction('AvailableAssetClasses', 'Assessment');
var url2 = UrlContent('~/Images/calendar.gif');
于 2012-05-24T14:49:22.170 に答える
3

ASP.NET MVCアプリケーションでURLを生成するときは、常にURLヘルパーを使用し、ハードコーディングしないでください。したがって、このスクリプトがビュー内に直接ある場合:

<script type="text/javascript">
    var url = '@Url.Action("a", "b")';
    $.get(url, function (data) {}, "json");
</script>

また、このスクリプトが、サーバー側のヘルパーにアクセスできない別のjavascriptファイル内にある場合(あるべき姿)、URLを関連するDOM要素に配置するだけで済みます。たとえば、HTML5データの使用-*属性:

<div data-url="@Url.Action("a", "b")" id="foo">Click me</div>

次に、javascriptファイルで:

$('#foo').click(function() {
    var url = $(this).data('url');
    $.get(url, function (data) {}, "json"); 
});

アンカーやフォームを目立たないようにAJAX化する場合は、すでに次のURLがあります。

$('a#someAnchor').click(function() {
    var url = this.href;
    $.get(url, function (data) {}, "json"); 
    return false;
});
于 2012-05-24T14:49:54.523 に答える