17

JavaScript コードを使用して MVC Web API を呼び出します。現在のパスが次の場合、正常に動作します。

http://localhost/myApp/Administrator

ただし、現在のパスが次の場合は失敗します。

http://localhost/myApp/Administrator/

エラーが発生しますThe resource cannot be found。以下はコードです:

$.getJSON("api/UserApi",
    function (data) {
        ...               
    });

コードで絶対 URL を使用したくありません。例:

$.getJSON("http://localhost/myApp/api/UserApi",          
    function (data) {
        ...    
    });

絶対 URL は問題なく機能しますが、柔軟性に欠けます。以下と同じことを行う方法はありますか?

$.getJSON("~/api/UserApi",          
    function (data) {
        ...
    });

ASP.NET は、"~" 文字を現在のアプリケーションのルート パスに置き換えることをサポートしています。例:

http://localhost/myApp

ただし、「~」文字は JavaScript ファイルではサポートされていません。どうすれば同じことを達成できますか?

JavaScript は、 のような ASP.NET ステートメントを使用できないスタンドアロン ファイルにありますUrl.Content。それを行うより良い方法はありますか?

以下の方法を見つけました。より良い解決策はありますか?:

1) 以下のコードを .cshtml ファイルに記述します。

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

2) currentDomain.js ファイルから変数を読み取ります。

$.getJSON(currentDomain + "/api/UserApi",          
    function (data) {
        ...        
});
4

4 に答える 4

16

アクションへのリンクを取得しようとしている場合は、ビューで JavaScript 変数を定義できますUrl.Action

<script type="text/javascript">
    var userApiPath = '@(Url.Action("userApi", "api"))';
</script>

その後、JS ファイルでこの変数を使用します。

$.getJSON(userApiPath,          
    function (data) {
});

アプリへの一般的なパスが必要な場合は、次のようにすることができます。

<script type="text/javascript">
    var path = '@(string.Format("{0}://{1}{2}",
                Request.Url.Scheme,
                Request.Url.Host,
                (Request.Url.IsDefaultPort) ? "" : string.Format(":{0}",
                Request.Url.Port)))';
</script>

そして、後でこの変数を JS ファイルのどこかで使用します。もちろんstring.Format、これを行うために使用する必要はありません。これは単なる例です。

編集:

RazorJSの使用を検討することもできます。

于 2013-04-27T09:47:52.047 に答える
5
@Url.Action

Javascript の場合

@Url.Content

CSS および JS ファイルの追加用。

于 2013-04-27T09:03:55.207 に答える
2

を試しましたURL helperか?次のように、コントローラー/アクションの完全修飾 URL を生成できます。

@Url.Action("Index", "Home", etc...)

参考:MSDN

更新
動的 URL を .js ファイルに書き込むことについて言及していることに気付きました。スクリプトに URL をハードコードしないでください。コードの保守が難しくなります。明日ドメインを変更し、スクリプト ファイルのいずれかで URL を変更するのを忘れたらどうなるでしょうか。代わりに、URL をパラメーターとして .cshtml ページから JS 関数に渡す必要があります。

于 2013-04-27T09:00:05.297 に答える
0

ビューセットページの URL:

<script type="text/javascript">
    var PageUrl = '@Url.Action("Index","Home")';
</script>

次にjsファイルで:

function MyFunc() {
var $form = $('form[id="Form"]');
    $.ajax({
    type: 'GET',
    url: PageUrl+"/MyActionName",
    data: $form.serialize(),
    cache: false,
    error: function (xhr, status, error) {

    },
    success: function (result) {
        //do something
    }
});

}

于 2016-11-01T06:16:37.367 に答える