我正在尝试在我的js文件中使用Url.Action()方法为我的Ajax调用定义URL。到目前为止,我失败了。
$.ajax( { type: "POST", url: '@Url.Action("SomeAction", "SomeController")', data: { fileID: rightClickedFileId }, success: function (data) { } });
如果我以这种方式定义网址,浏览器会尝试将数据发布到
http://localhost:5907/FileManager/@Url.Action(%22SomeAction%22,%20%22SomeController%22)
结果我的ajax调用失败。
但是,如果我'/SomeController/SomeAction'改为使用,则一切正常。
'/SomeController/SomeAction'
第二个可以,但是我想知道第一个的问题吗?可能是由于路由配置引起的吗?
谢谢。
Url.Action 是html辅助方法,将在您的剃刀视图中工作,而不在外部javascript文件中工作。
Url.Action
您可以做的是,Url.Action在剃刀视图中使用helper方法获取操作方法的相对URL,并将其设置为javascript变量,然后在外部js文件中使用。执行此操作时,请 务必确保使用javascript名称间隔 以避免与现有全局变量发生冲突。
您可以将此代码添加到 __Layout.cshtml中_
<script type="text/javascript"> var yourApp = yourApp || {}; yourApp.Urls = yourApp.Urls || {}; yourApp.Urls.baseUrl = '@Url.Content("~")'; yourApp.Urls.editUserUrl= '@Url.Action("Edit","User")'; </script>
或者在您的页面特定视图中,
@section Scripts { <script type="text/javascript"> var yourApp = yourApp || {}; yourApp.Urls = yourApp.Urls || {}; yourApp.Urls.baseUrl = '@Url.Content("~")'; yourApp.Urls.editUserUrl= '@Url.Action("Edit","User")'; </script> <script src="~/Scripts/PageSpecificExternalJsFile.js"></script> }
现在,在您的外部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.RouteUrlhtml helper方法来构建操作方法的相对URL。无论您当前的页面/路径如何,它都会正确构建网址。
Url.RouteUrl