2013-04-27 3 views
12

JavaScriptコードを使用してMVC Web APIを呼び出します。電流経路があるとき、それは正常に動作します:JavaScriptのMVC "〜"パス

http://localhost/myApp/Administrator

が、電流経路があるとき、それは失敗します。

http://localhost/myApp/Administrator/

私はエラーThe resource cannot be foundを取得します。以下のコードです:私は、コードに絶対URLを使用する必要はありません

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

、例えば:

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

正常に動作しない、絶対URLが、柔軟性に欠けます。下に同じことをする方法はありますか?

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

ASP.NETは、現在のアプリケーションのルートパスと「〜」の文字の置き換え、例えばサポートしています。しかし

http://localhost/myApp

を、「〜」の文字は、JavaScriptファイルでサポートされていません。 。私は同じことをどのように達成するのですか?

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

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

1)

2 .cshtmlファイルに

を以下のコードを書く).jsファイルから currentDomain変数を読む:

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

答えて

13

、JavaScriptがUrl.Actionが移入されますあなたのビューでvariales定義することができます

<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> 
:アプリへの一般的なパスをしたい場合は
$.getJSON(userApiPath,   
    function (data) { 
}); 

は、あなたはそのような何かを行うことができます10

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

EDIT:

またRazorJSを使用して検討することができます。ビューセットのページのURLで

+0

razorjsへのリンクはもう動作していません – Alok

2

はあなたを持っていますURL helperを試しましたか?それは、このようなように、あなたはあなたのコントローラ/アクションの完全修飾URLを生成することができます:

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

は参考:私はあなたがあなたの.jsに動的URLを書くとしていたのに気づいMSDN

UPDATE
ファイル。 URLをスクリプトにハードコードしてはいけません。コードを維持するのが難しくなります。明日ドメインを変更して、スクリプトファイルのURLを変更することを忘れた場合はどうすればよいですか?代わりに.cshtmlページからJS関数へのパラメータとしてURLを渡す必要があります。 Javascriptを

@Url.Content 

ため

+0

はい、私はハードコードドメイン名にしたくありません。 jsファイルなので、CSHMLファイルの '〜'のように '〜'文字を現在のドメインに置き換えることができるCSHMLファイルのような方法を探したいのですが、JSファイルでそれを行う方法がないようです現在CSHtmlファイルから現在のドメイン名を取得し、それをjs fiに渡しますル。 – sam

2
@Url.Action 

CSSやJSファイルの追加について。

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

、後であなたのJSファイルでこの変数を使用します:あなたは、アクションへのリンクを取得しようとしている場合は

+1

javascriptはasp.netステートメントを使用できないスタンドアロンファイルにあります。それを行うにはより良い方法ですか? – sam

0

<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 
    } 
}); 

}