Столбец dataColumn не принадлежит таблице: использование Ado.Net Datatable и $ .ajax () - PullRequest
0 голосов
/ 13 сентября 2018

Я использую MVC5 с данными Ado.net. У меня есть метод в контроллере. Я хотел бы использовать вызов ajax для отправки данных формы в этот метод. я хочу вызвать этот метод в своем действии создания при создании новых записей, поэтому я могу просто передать коллекцию данных в datatable для создания нескольких записей одновременно.

Вот так выглядит мой метод

    DataTable dt = new DataTable();
    public void InsertRecord(FormCollection collection)
    {

        if (dt.Columns.Count == 0) // if no columns defined
        {
            //create columns
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Length", typeof(double));
            dt.Columns.Add("Breadth ", typeof(double));
            dt.Columns.Add("Height ", typeof(double));.
            dt.Columns.Add("IsMeasured ", typeof(bool));
        }    
        if (collection != null)
        {
            DataRow row = dt.NewRow();

            row.SetField<string>("Name", collection["Name"]);
            row.SetField<double>("Length", Convert.ToDouble(collection["Length"]));
            row.SetField<double>("Breadth", Convert.ToDouble(collection["Breadth"]));
            row.SetField<double>("Height", Convert.ToDouble(collection["Height"]));
            row.SetField<bool>("IsMeasured", Convert.ToBoolean(collection["IsMeasured"]));
            dt.Rows.Add(row);
         }
 }

мой вызов ajax выглядит так:

function AddItem() {
       var inputs = $('#DetailCard input, #DetailCard select').serialize();
       $.ajax({
            type: 'POST',
            url: '/CreateRecords/InsertRecord',
            data: inputs,
            dataType: 'json',
            success: function (info) {
                if (info.result == "Error") {
                    alert(info.message);
                }
            }
        });
        };

моя кнопка отправки:

<input type="button" value="Add" onclick="AddItem()" />

Когда я запускаю проект, я вижу, что первые два столбца поля строки данных (Имя и Длина) заполнены (заполнены). Однако, когда программа попадает в столбец «Ширина», она вылетает и выдает ошибку ( System.ArgumentException ... «Ширина» не принадлежит таблице ). Я дважды проверил все, но не вижу, что мне не хватает.

1 Ответ

0 голосов
/ 13 сентября 2018

Ваш пример кода выше имеет пробел после имени (то есть "Ширина", а не "Ширина") при создании таблицы; имя столбца должно точно совпадать.

Дополнительные пробелы после этих 3 для имени:

dt.Columns.Add("Breadth ", typeof(double));
dt.Columns.Add("Height ", typeof(double));.
dt.Columns.Add("IsMeasured ", typeof(bool));

Изменить на:

dt.Columns.Add("Breadth", typeof(double));
dt.Columns.Add("Height", typeof(double));.
dt.Columns.Add("IsMeasured", typeof(bool));
...