Отправка данных JSON из Sencha Touch в ASP.NET MVC - PullRequest
6 голосов
/ 22 июня 2011

Я пытаюсь отправить данные на сервер. Но мой код не работает. Может кто-нибудь указать на ошибку?

Код Сенчи:

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

Спасибо!

Ответы [ 2 ]

10 голосов
/ 22 июня 2011

Удалите заголовок запроса 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 в качестве запроса, вы можете использовать метод 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) { }
});
2 голосов
/ 22 июня 2011

У меня недавно были похожие проблемы с extJS и MVC, но я использую Charles , чтобы определить, какие запросы на самом деле отправляются и какой ответ, если таковые имеются, возвращаются.

Этот инструмент неоценим, и я очень рекомендую его!

...