Ajax调用进入MVC Controller- Url问题

我查看了之前发布的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时,post看起来像:

 NetworkError: 500 Internal Server Error -  

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

为了使这个工作,Javascript必须放在Razor视图中以便该行

 @Url.Action("Action","Controller") 

被Razor解析并取代了真正的价值。

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

例如

 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中查看框架内置的Ajax方法,这样你就可以实现相同的function而不用JS代码“污染”你的视图。

您在代码示例中有类型错误。 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()); } }) 

;

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

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

这将尝试POST到URL:

http://域/控制器/搜索 (这是您要使用的操作的正确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()); } }); 

访问Url的简单方法尝试此代码

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