2011-12-19 70 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