2016-12-09 2 views
1

Я использую VS2015, C# и пытаюсь передать массив JSON на контроллер MVC.Отправка строки JSON на контроллер MVC сбой

JSON строку Я пытаюсь отправить это (я проверил это действительный JSON):

[{"iUSER_KEY":"130000096","iUSNW_KEY":"160001926"},{"iUSER_KEY":"160000209","iUSNW_KEY":"160001779"}] 

Ошибка я получаю это:

[ArgumentException: Invalid JSON примитивно: keysList. ]

на клиенте мой код:

$('.do-remove').click(function (e) { 

     e.preventDefault(); 

    var keys = []; 
    $("#tableUSNW tbody tr").each(function() { 

    var row = $(this); 
    var checked = $(row).find("td > input[id=inputChk]").is(":checked"); 

    if (checked === true) { 

     var iUSER_KEY = $(row).attr("data-userkey"); 
     var iUSNW_KEY = $(row).attr("data-ref"); 
     var user = {iUSER_KEY: iUSER_KEY, iUSNW_KEY: iUSNW_KEY}; 
     keys.push(user); 

     row.remove(); 
    } 
    }); 

    keys = JSON.stringify(keys); 

    $.ajax({ 
    type: "POST", 
    url: '/newsinternal/UpdateUsnwRemove', 
    traditional: true, 
    contentType: "application/json; charset=utf-8", 
    data: { keysList: keys }, 
    beforeSend: function() { 
     $('#loader').show(); 
    }, 
    success: function (msg) { 
     $('#loader').hide();   
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     $('#loader').hide(); 
     alert(xhr.responseText); 
    } 
    }); 
}); 

На сервере (MVC метод управления):

[HttpPost] 
public void UpdateUsnwRemove(List<DTO_CAUSNW> keysList) 
{ 
    using (iDatabase baza = new iDatabase(iPUURE.Web.Configuration.GetConnectionString())) 
    { 
    CommDB db = new CommDB(baza, false); 
    foreach (var item in keysList) 
    { 
     DTO_CAUSNW usnw = new DTO_CAUSNW();   
     usnw.cUSNW_STA = "9"; 
     iQuery qDelete = db.LoadInsertCAUSNW_BASE(usnw, "4"); // 1 = select, 2 = insert, 3 = update 4 = delete 
    } 
    } 
} 

И класс DTO_CAUSNW:

public class DTO_CAUSNW 
{ 
    public int? iUSNW_KEY { get; set; } //user_news key 
    public string cUSNW_STA { get; set; } //status: 1=enable, 2/null=disable, 9=erased 
    public string cUSNW_SRT { get; set; } //sort: 1=internal news 
    public DateTime? dUSNW_DAT { get; set; } //date of changed status 

    public int? iNEWS_KEY { get; set; } //news key 
    public int? iUSER_KEY { get; set; } //user key 

    public DateTime? dUSNW_DSI { get; set; } //time of signature 
    public DateTime? dUSNW_DAU { get; set; } //time of user changed 
    public string cUSNW_STU { get; set; } //user status: 1=confirm, 2/null=not confirm 
    public int? iUSNW_CPU { get; set; } //counter of postponed 
    public string cUSNW_COM { get; set; } //comment 
    public string cUSNW_NTO { get; set; } //note 

    public DTO_CANEWS oNEWS { get; set; } //the news 
    public DTO_BAUSER oUSER { get; set; } //the user 
} 
+0

изменить переменные ключи keysList ... и набор данных: keysList в вашем АЯКС вызова –

ответ

1

создать свой полезный груз

$('.do-remove').click(function (e) { 

    e.preventDefault(); 

    var keys = []; 
    $("#tableUSNW tbody tr").each(function() { 

    var row = $(this); 
    var checked = $(row).find("td > input[id=inputChk]").is(":checked"); 

    if (checked === true) { 

     var iUSER_KEY = $(row).attr("data-userkey"); 
     var iUSNW_KEY = $(row).attr("data-ref"); 
     var user = {iUSER_KEY: iUSER_KEY, iUSNW_KEY: iUSNW_KEY}; 
     keys.push(user); 

     row.remove(); 
    } 
    }); 


    var model = { keysList: keys }; 
    //..other code 

и Аякса stringyfy все это.

... 
data: JSON.stringify(model), 
... 
+0

Спасибо за ответ. Что делать, если было несколько параметров, скажем еще два целых числа? – FrenkyB

+1

включают их при создании полезной нагрузки. 'var model = {keysList: keys, param1: 1, param2: 2};' – Nkosi

+0

вам следует рассмотреть возможность обновления действия, чтобы взять сложную объектную модель, которая имеет параметры как свойства, поскольку вы можете использовать только один параметр из тела запрос – Nkosi

2

при отправке data: { keysList: keys } в вас Аяксе опубликовать это означает, сервер должен иметь объект ти keyslist собственности.

просто изменить data: { keysList: keys } к data: keys,

+0

Спасибо за ответ. Можно ли добавить некоторые другие параметры, скажем еще два целых числа в вызове метода? – FrenkyB

+0

@FrenkyB Вы имеете в виду somehing как 'UpdateUsnwRemove (List keysList, int param1, int param2)'? – esiprogrammer

+0

Да, вот так. – FrenkyB

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