2013-02-28 51 views
2

我有返回JSON數據的ASP.NET MVC操作。我的客戶使用jQuery的ajax函數來檢索這些數據並將其顯示在屏幕上。我使用絕對路徑在我的JavaScript控制器操作:JavaScript中的參考控制器操作

$.ajax({ 
    url: '/Home/Load', 
    type: 'post', 
    dataType: 'json' 
}) 

的問題是,在某些環境中,我們將添加一個額外的虛擬目錄前,使URL實際上是/Path/To/App/Home/Load。我想知道是否有辦法編寫我的JavaScript,以便每次部署時都不需要更新。我可以使用相對URL,例如../Home/Index,但偶爾我會移動我的JavaScript代碼。當使用MVC的捆綁器時,事情也會變得更加棘手。如果~角色能夠工作,那將會很好。

+1

爲什麼不使用'@ Url.Action(「action」,「controller」)' – 2013-02-28 15:10:58

+1

@AliRızaAdıyahşi,只有當你的javascript被嵌入到你的視圖中時,它纔會起作用。 – marteljn 2013-02-28 15:11:48

+0

不知道你的網址在調用ajax的頁面上看起來像什麼,但也許像'window.location'可能會給你所需要的基礎 – Jack 2013-02-28 15:16:24

回答

4

這裏是我做的:

添加以下行您的主視圖(這裏用剃刀語法):

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

然後在Javascript:

$.ajax({ 
    url: appBaseUrl + 'Home/Load', 
    type: 'post', 
    dataType: 'json' 
}) 
+0

我喜歡這種方法。唯一的缺點是它會引起警告,因爲它會混合使用剃鬚刀和JavaScript。我結合了你和理查德道爾頓的方法。 (base code)=「#base-url」)。' – 2013-02-28 15:54:38

2

你可以將URL放入與您的ajax請求相關的元素中:

<div id="mydiv" data-url="@Url.Action("Load", "Home")">Click me to load ajax request!</div> 

然後改變你的JS代碼:

$.ajax({ 
    url: $('mydiv').data('url'), // Could be $(this).data('url') if clicking to load 
    type: 'post', 
    dataType: 'json' 
}) 

這樣做的好處是,它仍然採用MVCS路由,以便任何自定義路線仍然可以工作。