2013-02-20 3 views
0

У меня есть следующие C# модели, но они не получают Id или AssigneeId населенную из JSON любая помощь пожалуйста ?:Возникли проблемы Deserialising модель JSON в контроллере

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

}

ответ

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 для

т ype данных, которые вы ожидаете от сервера.

У вас есть одна проблема с вашим кодом, когда вы создаете переменную postdataselectedTicketsIds уже содержит массив, поэтому вам не нужно обернуть его снова [selectedTicketsIds].

Так изменить ваш postdata на:

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

Привет Я сделал изменения типа контента, но это не имеет никакого значения, я думаю, что не так или иначе, но не исправить мою проблему –

+0

Пожалуйста, выйдите из в 'postdata' перед '$ .ajax' и включите его в свой пост. – nemesv

+0

Возможно, теперь я вижу ... ваши 'selectedTicketsIds' уже представляют собой массив, поэтому вам не нужно снова его обертывать' [selectedTicketsIds] '. Пожалуйста, попробуйте его с помощью 'var postdata = JSON.stringify ({ Билеты: selectedTicketsIds });' вместе с приложением 'contentType: '/ json'' – nemesv

Смежные вопросы