小编典典

无法识别JQuery中的ASP.NET MVC Url.Action

ajax

我正在尝试在我的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'改为使用,则一切正常。

第二个可以,但是我想知道第一个的问题吗?可能是由于路由配置引起的吗?

谢谢。


阅读 267

收藏
2020-07-26

共1个答案

小编典典

Url.Action 是html辅助方法,将在您的剃刀视图中工作,而不在外部javascript文件中工作。

您可以做的是,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.ActionUrl.RouteUrlhtml
helper方法来构建操作方法的相对URL。无论您当前的页面/路径如何,它都会正确构建网址。

2020-07-26