Как я могу поместить массив пользовательских классов из AJAX на контроллер Mpc asp.net - PullRequest
1 голос
/ 29 февраля 2012

у меня простой класс

 public class CaseField
    {
        public string XPath { get; set; }
        public string NewValue { get; set; }
    }

И контроллер

 public string SaveCaseData(string authority, 
                            string shopNo, 
                            string caseNo, 
                            CaseField[] caseFields)
        {
            return new Service().SaveCaseData(authority,shopNo,caseNo,caseFields.ToList());
        }

и jQuery AJAX-запрос

var editableFieldsArray = [];

   $('.editable').each(
            function () {
                var caseField = {};
                caseField.NewValue = $(this).attr("value");
                caseField.XPath = $(this).attr("xpath");
                editableFieldsArray.push(caseField);
            }
        );
var params = { authority: authority, shopNo: shopNum, caseNo: caseNum, caseFields: editableFieldsArray };
        $.ajax({
            url: $('.CaseDataView').data('url'),
            datatype: 'json',
            data: params,

            success: function (result) {

                isDataChanged = false;

                if (showOperationResult) {
                    if (result == 'Successful') {
                        jAlert('Case data saved succesfully!', '', 'BigInfoIcon');
                    } else if (result == 'Failed') {
                        jAlert('Failed to save case data!', '', 'BigInfoIcon');
                    }
                }

                HideChangeProcess();
            }
        });

Первые 3 параметра я получаю. Но с массивом у меня проблема - в моем браузере я смотрю на editableFieldsArray и у меня есть массив с правильными данными, но в контроллере у меня есть массив с нулевыми значениями
enter image description here


EDIT
Перед вызовом ajax в chrome у меня есть такая структура params

params
Object
authority: "localhost"
caseFields: Array[3]
0: Object
NewValue: "Thurid Waagstein Madsen"
XPath: "Case/SalesInfo/Customers/CustomerContactInfo/Name"
__proto__: Object
1: Object
NewValue: "Holger Danskes Vej 79"
XPath: "Case/SalesInfo/Customers/CustomerContactInfo/Address"
__proto__: Object
2: Object
NewValue: "Frederiksberg"
XPath: "Case/SalesInfo/Customers/CustomerContactInfo/City"
__proto__: Object
length: 3
__proto__: Array[0]
caseNo: "06659"
shopNo: "N100250"
__proto__: Object

В клопе:

enter image description here Где ошибка?

1 Ответ

0 голосов
/ 01 марта 2012

Вам нужно изменить свойство traditional на true, чтобы оно правильно передавало значения массива:

$.ajax({
    url: $('.CaseDataView').data('url'),
    datatype: 'json',
    data: params,
    traditional: true,
    ...

Если вы хотите сделать это для всех вызовов ajax, вы можете просто добавить это вместо:

jQuery.ajaxSetting.traditional = true;

Вы можете найти некоторую справочную информацию здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...