使用ajax调用在控制器中没有正确获取Json对象(具有集合)

时间:2013-11-22 06:12:42

标签: ajax asp.net-mvc json

我通过ajax调用向控制器发送一个json对象,ajax调用的data属性显示正确的数据。在post to controller的方法-ceceived参数中有集合及其计数完美显示但集合内的属性没有显示值。

这是代码 -

控制器 -

[HttpPost]
public ActionResult ImageOperations(ImageProcessingModel imageProcessingModel)
{
  return Json("sucess");
}

模型 -

public class ImageProcessingModel
{
    public string Source { get; set; }
    private List<ThumbnailImageSubTaskModel> _thumbnailImageSubTaskModel;
    public List<ThumbnailImageSubTaskModel> ThumbnailImageSubTaskModel
    {
        get
        {
            if (_thumbnailImageSubTaskModel == null)
            {
                _thumbnailImageSubTaskModel = new List<ThumbnailImageSubTaskModel>();
            }
            return _thumbnailImageSubTaskModel;
        }

    }
}

JS -

var ImageProcessingModel =
{
    "Source": "test",
    "ThumbnailImageSubTaskModel":allThumbnails.allItems()
}

allThumnails.allItems是ko.observableArray(),它有值。

$.ajax({
    url: '/ImageProcessingTask/ImageOperations',
    type: 'Post',
    data: ImageProcessingModel,
    success: function (data, status) {
        processEscapeKeyPress = true;
        var fn = window[successCallback];
        fn(data, passDataToCallback);
    },
    error: function (xhr, desc, err) {
        alert(err);
        processEscapeKeyPress = true;
        processAjaxError(xhr, desc, err);
    },
  });

此处ImageProcessingModel具有所有值和源是简单的字符串,因此该值仅在控制器中显示ThumbnailImageSubTaskModel,显示计数但不显示其值。 谢谢!

1 个答案:

答案 0 :(得分:0)

将JSON通过AJAX发送到MVC时遇到的常见问题。许多人忘记在他们的AJAX请求中设置数据类型。

尝试设置数据类型和内容类型:

$.ajax({
    url: '/ImageProcessingTask/ImageOperations',
    type: 'Post',
    **contentType: 'application/json; charset=UTF-8',
    dataType: 'json',**
    data: ImageProcessingModel,
    success: function (data, status) {
        processEscapeKeyPress = true;
        var fn = window[successCallback];
        fn(data, passDataToCallback);
    },
    error: function (xhr, desc, err) {
        alert(err);
        processEscapeKeyPress = true;
        processAjaxError(xhr, desc, err);
    },
});