Ajax调用MVC Controller- Url问题

Mih*_*abo 19 javascript ajax jquery 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());
 }
});
Run Code Online (Sandbox Code Playgroud)

在调用Url时,帖子看起来像:

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

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

Rob*_*ett 56

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

@Url.Action("Action","Controller")
Run Code Online (Sandbox Code Playgroud)

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

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

例如

var MyAppUrlSettings = {
    MyUsefulUrl : '@Url.Action("Action","Controller")'
}
Run Code Online (Sandbox Code Playgroud)

并在您的.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());
});
Run Code Online (Sandbox Code Playgroud)

或者在HtmlHelpers中查看框架内置Ajax方法,这样你就可以实现相同的功能而不用JS代码"污染"你的视图.


Yor*_*rgo 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());
 }
})
Run Code Online (Sandbox Code Playgroud)

;


SJC*_*her 9

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

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

这将尝试POST到URL:

" http://域/控制器/搜索(这是您要使用的操作的正确URL)"