mvc Ajax如何使用formCollection更新序列化模型

时间:2016-06-08 08:03:29

标签: javascript jquery ajax asp.net-mvc

我有一个页面,它会将序列化模型发送回控制器。在这种情况下,我使用ajax。

在视图中,我有以下代码:

@Html.Hidden("processViewModel", new Microsoft.Web.Mvc.MvcSerializer().Serialize(Model, SerializationMode.Signed))

控制器看起来像这样:

[HttpPost]
public ActionResult PreviewSample([Deserialize]ProcessViewModel processViewModel /*FormCollection form*/)

这是我的ajax代码:

function GetPreview() {


var json = $('form').serializeObject();
complete = false;

json['ProcessDTO.FileUploadDTO.TempUploadFileDTO.FileInformation.HasHeader'] = false; // $('input[name="ProcessDTO.FileUploadDTO.TempUploadFileDTO.FileInformation.HasHeader"]').is(':checked');

alert($('input[name="ProcessDTO.FileUploadDTO.TempUploadFileDTO.FileInformation.HasHeader"]').is(':checked'));

var jsonData = JSON.stringify(json);
var url = ROOT + '/request/previewsample/';

if (lastPreviewCall != undefined) {
    if (lastPreviewCall.status != 200) {
        lastPreviewCall.abort();
    }
}

lastPreviewCall = $.ajax({
    url: url,
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
 //   dataType: 'json',
    data: jsonData,
    otherParam: true,
    async: true,
    success: function (res) {

        $('#preview').find('tbody').find('tr').remove();

        var selected = $('.addressType:checked').attr('data-hideClass');

        for (var i = 0; i < res.PreviewData.length; i++) {
            var entry = '<tr>';

            var row = res.PreviewData[i];

            for (var u = 0; u < row.length; u++) {
                if (u == 0 && selected == 'consumer') {
                    entry += '<td></td>';
                }
                else {
                    entry += '<td><span>' + row[u] + '</span></td>';
                }
            }
            entry += '</tr>';
            $('#preview').find('tbody').append(entry)
        }
    }
});

}

所以现在我有一个复选框,在此模型中默认为true,当我取消选中它时,ajax会将序列化模型发送回控制器,但复选框的值始终为true。

我该如何更新模型?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

解决方案是添加

  TryUpdateModel(processViewModel);

在控制器中,然后一切都很好......