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