7

現在、このアプローチを使用して、正しい相対 URI を取得しています (展開状況とは無関係です)。かみそりコード (asp.net mvc 3):

@section JavaScript
{  
    <script type="text/javascript">
        var _getUrl =  "@Url.Content("~/bla/di/bla")";
    </script>
}

別の js ファイル:

$.ajax({
    url: _getUrl,

もっと良いアプローチがあると思いますか?

4

2 に答える 2

6

個人的には、HTML5 の data-* 属性を使用するか、目立たないように AJAX 化する DOM 要素の一部として URL を含めることを好みます。

$.ajax問題は、そのように飛び回る呼び出しを決して書かないことです。いくつかの DOM イベントに対応するように記述します。たとえば、アンカーのクリックのように。この場合は簡単です。HTML ヘルパーを使用してこのアンカーを生成するだけです。

@Html.ActionLink("click me", "someAction", "somecontroller", new { id = "123" }, new { @class = "link" })

その後:

$('.link').click(function() {
    $.ajax({
        url: this.href,
        type: 'GET',
        success: function(result) {
            ...
        }

    });
    return false;
});

あるいは、フォームを AJAX 化しています:

@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" }))
{
    ...
}

その後:

$('#myForm').submit(function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function(result) {
            ...
        }
    });
    return false;
});

もう 1 つの例は、対応する DOM 要素で適切な URL が利用できない場合に、HTML5 の data-* 属性を使用することです。ドロップダウンの選択が変更されたときに、AJAX を使用してコントローラー アクションを呼び出したいとします。たとえば、カスケード ddl を考えてみてください。

ドロップダウンは次のようになります。

@Html.DropDownListFor(x => x.SelectedValue, Model.Values, new { id = "myDdl", data_url = Url.Action("SomeAction") })

その後:

$('#myDdl').change(function() {
    var url = $(this).data('url');
    var selectedValue =  $(this).val();
    $.getJSON(url, { id: selectedValue }, function(result) {
        ...
    });
});

_getUrlご覧のとおり、ビューで宣言したこのグローバル javascript 変数は実際には必要ありません。

于 2013-04-05T13:44:36.480 に答える
0

私は次のことをします:

Javascriptの前のRazor C#スクリプト

@{
    var myUrlString = Url.Action("ActionName", new { controller="ControllerName" });
}

JavaScript

$.ajax('@myUrlString',{
    // options
});

Url.RouteUrlまたはを使用することもできますUrl.HttpRouteUrl

編集 - 分離されたJSファイルの例を示す

かみそり

@{
    var myServerGeneratedValue = Url.Action("ActionName", new{controller="ControllerName"});
}
<script type="text/javascript">
    var myHelperObject = new MyHelperObject();
    myHelperObject.Init('@myServerGeneratedValue');
</script>

JSファイル

var MyHelperObject = function(){

    this.Init = function(serverGeneratedValue){
        // do something with serverGeneratedValue
    };

};
于 2013-04-05T13:42:38.423 に答える