我查看了之前发布的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编码参考
答案 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());
});