我将现有的ASP.NET应用程序转换为MVC2,并且有一个使用Ajax通过jQuery调用的现有方法,该方法以前曾起作用,但现在不起作用。因此,由于使用了我无法弄清楚的MVC2,似乎需要做一些更改。
我降低了代码的复杂性,但仍然无法正常工作。这是我当前的代码:
触发按钮单击的jQuery脚本
function leaveComment() { if (validate()) { $.ajax({ type: "POST", url: "/Pages/PostBlogComment", data: "{'name':'Test','url':'Test','email':'Test','body':'Test','postid':'Test'}", dataType: "json", success: function (msg) { //success code goes here }, error: function (msg) { //error code goes here } }); } };
在名为Pages的控制器内部,我创建了以下方法:
public string PostBlogComment( string name, string url, string email, string body, string postid) { return "This is a test"; }
调试时,我可以看到调用了PostBlogComment方法,但是这里面临两个主要问题:
Test
对于那些经常使用这些东西的人来说,错误可能很容易发现(或者至少我希望如此:))
这是完成这项工作所需的更改:
$.ajax({ type: 'POST', url: '/Pages/PostBlogComment', data: { name: 'Test', url: 'Test', email: 'Test', body: 'Test', postid: 'Test' }, success: function (result) { alert(result.Value); }, error: function (msg) { //error code goes here } });
和你的控制器动作
public ActionResult PostBlogComment( string name, string url, string email, string body, string postid ) { return Json(new { Value = "This is a test" }); }
可以通过引入视图模型进行改进:
public class PostViewModel { public string Name { get; set; } public string Url { get; set; } public string Email { get; set; } public string Body { get; set; } public string Postid { get; set; } }
然后:
public ActionResult PostBlogComment(PostViewModel model) { return Json(new { Value = "This is a test" }); }
注意事项:
data
$.ajax({ type: 'POST', url: '/Pages/PostBlogComment', data: JSON.stringify({ name: 'Test', url: 'Test', email: 'Test', body: 'Test', postid: 'Test' }), contentType: 'application/json', success: function (result) { alert(result.Value); }, error: function (msg) { //error code goes here } });
ASP.NET MVC中的所有控制器操作都必须返回ActionResults。因此,如果您想要Json,则返回JsonResult。
该操作将匿名类型传递给Json方法,该方法包含Value在success回调中使用的属性,服务器的响应如下所示:
Value
success
{ 'Value': 'This is a test' }
部署此类文件时,请不要在您的javascript文件中使用此类硬编码网址,否则您的应用程序可能不会损坏。处理网址时,请始终使用Url帮助器:
... url: '<%= Url.Action("PostBlogComment", "Pages") %>', ...
或者,如果这是一个外部javascript文件,则可以使用一些在视图中初始化的全局js变量来指向正确的网址,也可以将此网址作为DOM的一部分(例如,作为anchorhref属性或HTML5 data-*属性),然后使用jQuery获取值。
data-*