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

标签 jquery ajax asp.net-mvc

我正在尝试在 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 帮助器方法,它将在您的 razor View 中运行,而不是在外部 javascript 文件中运行。

您可以做的是,在 razor View 中使用 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>

或者在您的页面特定 View 中,

@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.RouteUrl html 帮助器方法来构建操作方法的相对 URL。无论您当前的页面/路径如何,它都会正确构建 url。

如果您想在角度 Controller /数据服务等中执行相同的操作,请查看 this post这解释了如何使用角度值提供程序来执行相同的操作。

关于jquery - JQuery 中的 ASP.NET MVC Url.Action 无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12514745/

相关文章:

asp.net-mvc - 字典<string,string> 与 Hashtable<string,string>

javascript - jquery捕获所选id的文本

javascript - 在ajax JQUERY中传递数据

javascript - Ajax 向 Controller 发出调用后收到 400(错误请求)

ruby-on-rails - Rspec Capybara 测试与 ajax 调用不更新记录

asp.net - 初始化数据库时出现异常

asp.net-mvc - Razor if/else 在 for 循环 : The for block is missing a closing "}" character 内

jquery - 如何将 jQuery 元素选择应用于字符串变量

javascript - JQuery 事件仅触发一次

javascript - Yii ajax 问题