2011-12-19 61 views
6

我知道一個可以使用這個功能相對URL與asp.net的MVC 3

@Url.Action("MyInfo", "Home") 

避免網址的硬編碼,但我$.ajax電話是在一個單獨的.js文件。以上是否仍然有效?

據我所知,@Url.Action只能在Razor文件中使用。但考慮到我們被建議使用非突破性的JS,我不太確定我將如何使用@Url.Action

請指教。

回答

12

會上面還是工作?

從我所知,@ Url.Action只會剃刀文件

你的知識是正確的內部工作。

但考慮到我們建議使用非強大的JS,我不是 很確定我將如何使用@ Url.Action。

你可以使用HTML5數據 - *屬性,你是悄悄地提高(除非該元素已經是<form>或在這種情況下,它已經包含URL錨)一些DOM元素:

<div id="foo" data-url="@Url.Action("foo")">Hello</div> 

,然後在您的單獨的JavaScript文件中:

$(function() { 
    $('#foo').click(function() { 
     var url = $(this).data('url'); 
     // TODO: do something with the url 
    }); 
}); 
+0

如果你已經有一個'form',只需要這樣做:'var url = $('form')。url;'。 – 2013-06-16 04:59:21

4

爲相對路徑添加函數參數。例如,在您查看:

<script type="text/javascript"> 
    var path = "@Url.Action("ActionName", "ControllerName")"; 

    someAjaxMethod(path) 
</script> 

,並在外部js文件:

function someAjaxMethod(path) 
{ 
    var data = {}; 
    $.ajax(path, data) 
} 
+0

此示例沒有顯示出好的方法,因爲路徑變量現在是全局的。對本地URL使用一些命名空間或對本地URL使用「data-url」方法會更好一些 – 2015-02-19 08:49:00

+0

我同意這不是最好的答案,我更喜歡@ Darin的方法,但它對於簡單場景仍然有效。 – jrummell 2015-02-19 13:54:17

+0

對不起,但是你回滾我的編輯,對代碼甚至不起作用(語法錯誤)的實際改進?如果可以的話,我會倒下兩次。你可以編寫任何代碼,但不會複製它! – 2015-02-20 07:45:33