0

私は次のC#モデルを持っていますが、JSONからIdまたはAssigneeIdが入力されません。

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

}

4

1 に答える 1

1

JSONをMVCコントローラーに送信する場合は、 :にを設定contentTypeする必要があり'application/json'ます。$.ajax

$.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

サーバーから返されると予想されるデータのタイプ。

コードにもう1つ問題があります。変数を作成するときにpostdataselectedTicketsIds変数にはすでに配列が含まれているため、を再度ラップする必要はありません[selectedTicketsIds]

したがって、次のように変更postdataします。

var postdata = JSON.stringify({
        Tickets: selectedTicketsIds
});
于 2013-02-20T10:41:46.217 に答える