emr*_*azi 10 ajax asp.net-mvc jquery
我试图在我的js文件中使用Url.Action()方法来定义我的ajax调用的url.到目前为止,我失败了.
$.ajax(
{
type: "POST",
url: '@Url.Action("SomeAction", "SomeController")',
data: {
fileID: rightClickedFileId
},
success: function (data) {
}
});
Run Code Online (Sandbox Code Playgroud)
如果我以这种方式定义网址,浏览器会尝试将数据发布到
http://localhost:5907/FileManager/@Url.Action(%22SomeAction%22,%20%22SomeController%22)
Run Code Online (Sandbox Code Playgroud)
结果我的ajax调用失败了.
但是,如果我'/SomeController/SomeAction'改用,那么每件事都可以.
第二个工作正常,但我想知道第一个问题?可能是由于路由配置?
谢谢.
Shy*_*yju 21
Url.Action 是一个html帮助方法,它将在您的剃刀视图中工作,而不是在您的外部JavaScript文件中.
你可以做的是,Url.Action在剃刀视图中使用辅助方法获取你的动作方法的相对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>
Run Code Online (Sandbox Code Playgroud)
或者在特定于页面的视图中,
@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>
}
Run Code Online (Sandbox Code Playgroud)
现在在您的外部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
Run Code Online (Sandbox Code Playgroud)
始终使用Url.Action或Url.RouteUrlhtml辅助方法来构建操作方法的相对URL.无论您当前的页面/路径如何,它都会正确构建网址.
如果你想在角度控制器/数据服务等内部做同样的事情,请看一下这篇文章,它解释了如何使用角度值提供者来做同样的事情.
你不能'@Url.Action("SomeAction", "SomeController")'在js文件中使用,因为这是ASP.NET MVC助手,如果你把你的代码放到视图中,一切都会起作用.