Ajax调用MVC Controller- Url问题

时间:2012-04-03 07:06:31

标签: javascript jquery ajax asp.net-mvc-3

我查看了之前发布的jQuery / MVC问题,但没有找到可行的答案。

我有以下JavaScript代码:

$.ajax({
 type: "POST",
 url: '@Url.Action("Search","Controller")',
 data: "{queryString:'" + searchVal + "'}",
 contentType: "application/json; charset=utf-8",
 dataType: "html",
 success: function (data) {
 alert("here" + data.d.toString());
 }
});

在调用Url时,帖子如下:

NetworkError: 500 Internal Server Error - <a href="http://localhost/Web/Navigation/@Url.Action(%22Search%22,%22Chat%22)"></a> 

有人可以向我解释为什么它会像这样(它背后的逻辑)返回它并为我提供一个有效的解决方案。提前谢谢!
P.S。:附加信息:%22是&lt;&lt;“&gt;&gt;字符的URL编码参考

6 个答案:

答案 0 :(得分:56)

为了实现这一点,Javascript必须放在Razor视图中以便行

@Url.Action("Action","Controller")
Raz解析

并替换实际值。

如果您不想将Javascript移动到View中,可以查看在视图中创建设置对象,然后从Javascript文件中引用它。

e.g。

var MyAppUrlSettings = {
    MyUsefulUrl : '@Url.Action("Action","Controller")'
}

并在.js文件中

$.ajax({
 type: "POST",
 url: MyAppUrlSettings.MyUsefulUrl,
 data: "{queryString:'" + searchVal + "'}",
 contentType: "application/json; charset=utf-8",
 dataType: "html",
 success: function (data) {
 alert("here" + data.d.toString());
});

或者看看在HtmlHelpers中使用built方法中的框架Ajax,这样就可以实现相同的目标,而不会用JS代码“污染”你的视图。

答案 1 :(得分:10)

您在代码示例中遇到类型错误。你在success

之后忘记了卷发
$.ajax({
 type: "POST",
 url: '@Url.Action("Search","Controller")',
 data: "{queryString:'" + searchVal + "'}",
 contentType: "application/json; charset=utf-8",
 dataType: "html",
 success: function (data) {
     alert("here" + data.d.toString());
 }
})

答案 2 :(得分:8)

在没有获得视图的情况下执行此操作的好方法可能是:

$.ajax({
    type: "POST",
    url: '/Controller/Search',
    data: { queryString: searchVal },
    success: function (data) {
      alert("here" + data.d.toString());
    }
});

这将尝试POST到URL:

&#34; http://domain/Controller/Search (这是您要使用的操作的正确网址)&#34;

答案 3 :(得分:3)

Rob's回答开始,我目前正在使用以下语法。由于这个问题引起了很多关注,我决定与您分享:

var requrl = '@Url.Action("Action", "Controller", null, Request.Url.Scheme, null)';
  $.ajax({
   type: "POST",
   url: requrl,
   data: "{queryString:'" + searchVal + "'}",
   contentType: "application/json; charset=utf-8",
   dataType: "html",
   success: function (data) {
   alert("here" + data.d.toString());
   }
  });

答案 4 :(得分:0)

mihai-labo's回答开始,为什么不跳过完全声明requrl变量并将url生成代码直接放在“url:”前面,如:

 $.ajax({
    type: "POST",
    url: '@Url.Action("Action", "Controller", null, Request.Url.Scheme, null)',
    data: "{queryString:'" + searchVal + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "html",
    success: function (data) {
        alert("here" + data.d.toString());
    }
});

答案 5 :(得分:0)

访问网址的简单方法试用此代码

 $.ajax({
     type: "POST",
      url: '/Controller/Search', 
     data: "{queryString:'" + searchVal + "'}",
     contentType: "application/json; charset=utf-8",
     dataType: "html",
     success: function (data) {
     alert("here" + data.d.toString());
    });