从 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 创建新的模型/视图/控制器

Sencha Touch:如何更新数据存储以从控制器列出

从 Sencha touch 中的列表创建另一个列表

无法在 sencha touch 中的 localstorage 上设置嵌套的 json 数据

在 Sencha Touch 中解析复杂的 JSON