无法识别JQuery中的ASP.NET MVC Url.Action
我想在我的js文件中使用Url.Action()方法来定义我的ajax调用的url。 到目前为止,我失败了。
$.ajax( { type: "POST", url: '@Url.Action("SomeAction", "SomeController")', data: { fileID: rightClickedFileId }, success: function (data) { } });
如果我以这种方式定义URL,浏览器会尝试将数据发布到
http://localhost:5907/FileManager/@Url.Action(%22SomeAction%22,%20%22SomeController%22)
结果我的ajax调用失败了。
但是,如果我使用'/SomeController/SomeAction'
代替,那么每件事情都可以。
第二个工作正常,但我想知道第一个问题? 可能是由于路由配置?
谢谢。
Url.Action
是一个html帮助方法,它可以在你的剃刀视图中工作,而不是在你的外部javascript文件中。
你可以做的是,在razor视图中使用Url.Action
帮助方法获取你的动作方法的相对URL,并将其设置为javascript变量并在外部js文件中使用它。 执行此操作时,请务必使用javascript命名空间以避免与现有全局变量发生冲突。
您可以在_Layout.cshtml中添加此代码
或者在特定于页面的视图中,
@section Scripts { }
现在在您的外部JavaScript文件中,您可以像访问它一样访问它
var urlToEditUser = yourApp.Urls.editUserUrl; //you can use urlToEditUser now // Or With the base url, you may safely add the remaining part of your url. var urlToEditUser2 = yourApp.Urls.baseUrl+"User/Edit"; //you can use urlToEditUser2 now
始终使用Url.Action
或Url.RouteUrl
html帮助程序方法来构建操作方法的相对URL。 无论您当前的页面/路径如何,它都会正确构建url。
如果你想在角度控制器/数据服务等内部做同样的事情,请看一下这篇文章 ,它解释了如何使用角度值提供者来做同样的事情。
你不能在js文件中使用'@Url.Action("SomeAction", "SomeController")'
,因为这是ASP.NET MVC助手,如果你把你的代码放到视图中,一切都会有效。
我的方法与@ Shyju相似,除了在Razor视图中设置一个变量,我在我的JavaScript中调用一个init
函数,并将它传递给我需要Razor解释的所有参数。
所以代码看起来像这样:
MyScript.init({ editUserUrl: "@Url.Action("Edit","User")", anotherUrl: "@Url.Action("AnotherUrl", "User")" })
然后在JavaScript中:
var m_options; MyScript.init = function(options) { m_options = options; } // use with m_options.editUserUrl here $.ajax( { type: "POST", url: m_options.editUserUrl, data: { fileID: rightClickedFileId }, success: function (data) { } });
我在这里写了一篇更详细的post: http : //blog.blanklabs.com/2015/02/aspnet-mvc-refactoring-friendly.html
你可以这样写它
url:'/controllername/Actionname',