发布
社区首页 >问答首页 >无法识别JQuery中的ASP.NET MVC Url.Action

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

Stack Overflow用户
提问于 2012-09-20 22:23:52
回答 4查看 36.3K关注 0票数 11

我尝试在js文件中使用Url.Action()方法来定义ajax调用的urls。到目前为止,我已经失败了。

代码语言:javascript
代码运行次数:0
复制
 $.ajax(
 {
    type: "POST",
    url: '@Url.Action("SomeAction", "SomeController")',
    data: { 
        fileID: rightClickedFileId
    },
    success: function (data) {

    }
 });

如果我以这种方式定义url,浏览器会尝试将数据发送到

代码语言:javascript
代码运行次数:0
复制
http://localhost:5907/FileManager/@Url.Action(%22SomeAction%22,%20%22SomeController%22)

结果,我的ajax调用失败了。

但是,如果我使用'/SomeController/SomeAction',一切都会正常工作。

第二个可以工作,但我想知道第一个有什么问题?会不会是路由配置造成的?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-20 22:36:42

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

您可以做的是,在剃刀视图中使用Url.Action辅助方法获取操作方法的相对url,并将其设置为javascript变量,然后在外部js文件中使用该变量。在执行此操作时,始终确保使用javascript命名空间,以避免可能与现有全局变量发生冲突。

您可以将此代码添加到_Layout.cshtml中

代码语言:javascript
代码运行次数:0
复制
<script type="text/javascript">

    var yourApp = yourApp || {};
    yourApp.Urls = yourApp.Urls || {};
    yourApp.Urls.baseUrl = '@Url.Content("~")';
    yourApp.Urls.editUserUrl= '@Url.Action("Edit","User")';

</script>

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

代码语言:javascript
代码运行次数:0
复制
@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文件中访问它,如下所示

代码语言:javascript
代码运行次数:0
复制
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,它解释了如何使用角度值提供者来做同样的事情。

票数 21
EN

Stack Overflow用户

发布于 2012-09-20 22:32:55

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

票数 7
EN

Stack Overflow用户

发布于 2015-02-02 07:58:28

我的方法类似于@Shyju的方法,不同的是,我不是在Razor视图中设置一个变量,而是在我的JavaScript中调用一个init函数,并将我需要由Razor解释的所有参数传递给它。

因此,代码将如下所示:

代码语言:javascript
代码运行次数:0
复制
MyScript.init({
    editUserUrl: "@Url.Action("Edit","User")",
    anotherUrl: "@Url.Action("AnotherUrl", "User")"
})

然后在JavaScript中:

代码语言:javascript
代码运行次数:0
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12514745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档