在控制器中对JSON模型进行沙漠化时出现问题

Having issues Deserialising a JSON model in controller

本文关键字:沙漠化 问题 控制器 JSON 模型      更新时间:2023-09-26

我有以下C#模型,但它们没有从JSON中获得填充的Id或AssignmentId。有什么帮助吗?:

public class AssignModel
{
    [Required]
    public Guid Id { get; set; }
    public bool Clear { get; set; }
    public string AssigneeId { get; set; }
}
public class MassAssignModel
{
    [Required]
    public List<AssignModel> Tickets { get; set; }
} 

public ActionResult MassAssign(MassAssignModel model)
{
    //DO stuff here
}

我试图通过取消JSON的序列化来填充这些值,但它从来没有得到值。这是我的javascript,第一个方法调用是massAssign():

function massAssign() {
    assignTicketsTo(getSelectedTicketsIds());
}
function getSelectedTicketsIds() {
    var tickets;
    var selected = $('.selected-ticket:checked');
    tickets = selected.map(function () {
    return { Id: this.value, AssigneeId: "COMPONENTS'ASTANNARD", Clear:false };
    }).get();
    return tickets;
}
function assignTicketsTo(selectedTicketsIds) {
    var postdata = JSON.stringify({
        Tickets: [selectedTicketsIds]
    });
    $.ajax({
    url: Helper.Util.action({ controller: "Ticket", action: "MassAssign" }),
    dataType: 'json',
    data: postdata,
    type: 'post',
    success: function (data, textStatus, jqXHR) {
    },
    error: function (jqXHR, textStatus, errorThrown) {
        $("#load_tickets").hide();
        Helper.alert(errorThrown);
    }
});

}

如果要将JSON发送到MVC控制器,则需要在$.ajax:中将contentType设置为'application/json'

$.ajax({
    url: Helper.Util.action({ controller: "Ticket", action: "MassAssign" }),
    dataType: 'json',
    contentType: 'application/json',
    data: postdata,
    type: 'post',
    success: function (data, textStatus, jqXHR) {
    },
    error: function (jqXHR, textStatus, errorThrown) {
        $("#load_tickets").hide();
        Helper.alert(errorThrown);
    }

dataType用于

您期望从服务器返回的数据类型。

您的代码还有一个问题,当您创建postdata时,selectedTicketsIds变量已经包含一个数组,因此您不需要用[selectedTicketsIds]再次包装它。

因此,将您的postdata更改为:

var postdata = JSON.stringify({
        Tickets: selectedTicketsIds
});