【问题标题】:ASP.NET MVC Url.Action in JQuery is not recognized无法识别 JQuery 中的 ASP.NET MVC Url.Action
【发布时间】:2012-09-20 14:23:51
【问题描述】:

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

第二个工作正常,但我想知道第一个的问题?会不会是路由配置的原因?

谢谢。

【问题讨论】:

    标签: jquery ajax asp.net-mvc


    【解决方案1】:

    Url.Action 是一个 html 辅助方法,它可以在您的 razor 视图中工作,而不是在您的外部 javascript 文件中。

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

    或在您的页面特定视图中,

    @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。

    如果您想在您的角度控制器/数据服务等中做同样的事情,请查看this post,它解释了如何使用角度值提供程序来做同样的事情。

    【讨论】:

    • 但是不将 js 代码写入 MVC 视图也是一种不好的做法吗?我
    • 获取全局变量的路径,没问题。这是您可以使用 Helper 方法获取路径并传递给外部 js 文件的唯一方法。
    【解决方案2】:

    您不能在 js 文件中使用'@Url.Action("SomeAction", "SomeController")',因为这是 ASP.NET MVC 助手,如果您将代码放到视图中,一切都会正常工作。

    【讨论】:

      【解决方案3】:

      我的方法与@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) {
          }
       });
      

      我在这里写了一篇更详细的帖子: http://blog.blanklabs.com/2015/02/aspnet-mvc-refactoring-friendly.html

      【讨论】:

        【解决方案4】:

        你可以这样写就行了

        url:'/controllername/Actionname',
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-23
          • 2011-09-18
          • 2011-05-19
          • 2010-11-05
          • 2019-06-27
          • 1970-01-01
          相关资源
          最近更新 更多