从 Sencha Touch 发送 JSON 数据到 ASP.NET MVC
Posted
技术标签:
【中文标题】从 Sencha Touch 发送 JSON 数据到 ASP.NET MVC【英文标题】:Send JSON data from Sencha Touch to ASP.NET MVC 【发布时间】:2011-06-22 15:46:39 【问题描述】:我正在尝试向服务器发送数据。但是我的代码不起作用。有人能指出错误吗?
煎茶码:
Ext.Ajax.request(
url: '/Blog/SavePost',
method: 'POST',
headers:
'Content-Type': 'application/json;charset=utf-8'
,
params:
id: currentPost.data.Id,
title: currentPost.data.Title,
text: currentPost.data.Text,
authorName: currentPost.data.AuthorName,
authorEmail: currentPost.data.AuthorEmail,
postDate: currentPost.data.PostDate
,
failure: function (response) ,
success: function (response, opts)
);
MVC 代码:
[HttpPost]
public ActionResult SavePost(int id, string title, string text, string authorName, string authorEmail, DateTime postDate)
Post post = new Post Id = id, Title = title, Text = text, AuthorEmail = authorEmail, AuthorName = authorName, PostDate = postDate ;
var postRepository = new PostRepository();
postRepository.Add(post);
return Json();
谢谢!
【问题讨论】:
你能详细说明什么不起作用吗? 【参考方案1】:删除 application/json
请求标头,因为您没有发送 JSON 编码请求:
Ext.Ajax.request(
url: '/Blog/SavePost',
method: 'POST',
params:
id: currentPost.data.Id,
title: currentPost.data.Title,
text: currentPost.data.Text,
authorName: currentPost.data.AuthorName,
authorEmail: currentPost.data.AuthorEmail,
postDate: currentPost.data.PostDate
,
failure: function (response) ,
success: function (response, opts)
);
我个人建议让您的控制器操作直接采用 Post
模型,而不是将每个属性作为参数,然后手动将它们重新复制到 Post 对象中:
[HttpPost]
public ActionResult SavePost(Post post)
var postRepository = new PostRepository();
postRepository.Add(post);
return Json(...);
默认模型绑定器会处理所有事情。现在,如果您想使用 JSON 作为请求,您可以使用现代 Web 浏览器原生内置的 JSON.stringify
方法:
Ext.Ajax.request(
url: '/Blog/SavePost',
method: 'POST',
headers:
'Content-Type': 'application/json;charset=utf-8'
,
params:
post: JSON.stringify(
id: currentPost.data.Id,
title: currentPost.data.Title,
text: currentPost.data.Text,
authorName: currentPost.data.AuthorName,
authorEmail: currentPost.data.AuthorEmail,
postDate: currentPost.data.PostDate
)
,
failure: function (response) ,
success: function (response, opts)
);
【讨论】:
谢谢!有用。 -- 但是如果我在 params 部分使用 'post: JSON.stringify',那么 'post' 将为空。结果:对于发送数据参数: id: currentPost.data.Id, title: currentPost.data.Title, text: currentPost.data.Text, authorName: currentPost.data.AuthorName, authorEmail: currentPost.data.AuthorEmail, postDate: currentPost.data.PostDate ,用于接收数据 public ActionResult SavePost(Post post) ... 嘿,请看这个...***.com/questions/9563417/…。并尝试回答它...【参考方案2】:我最近在使用 extJS 和 MVC 时遇到了类似的问题,但我使用 Charles 来确定实际发送的请求以及返回的响应。
这个工具非常宝贵,我强烈推荐它!
【讨论】:
嘿,请看这个...***.com/questions/9563417/…。并尝试回答它...以上是关于从 Sencha Touch 发送 JSON 数据到 ASP.NET MVC的主要内容,如果未能解决你的问题,请参考以下文章
Sencha touch2:对 Json 数据进行 Ajax 发布请求
Sencha Touch - 从 JSON 创建新的模型/视图/控制器