javascript - Ajax调用到MVC控制器-Url问题




jquery asp.net-mvc-3 (4)

我看了以前发布的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> 

有人可以请向我解释为什么它会像这样(它背后的逻辑)返回它,并提供给我一个有效的解决方案。 提前致谢!
PS:附加信息:%22是<<“>>字符的URL编码参考


代码示例中有一个类型错误。 你success后忘记了curlybracket

$.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());
 }
})

;


没有涉及的观点,做一个好的方法可能是:

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

这将尝试POST到URL:

http:// domain / Controller / Search (这是您要使用的操作的正确URL)”


从Rob的回答开始,我现在使用下面的语法。由于这个问题已经得到了很多关注,我决定和你分享一下:

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());
   }
  });

从mihai-labo的答案开始,为什么不直接声明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());
    }
});




asp.net-mvc-3