列“ dataColumn”不属于表:使用Ado.Net Datatable和$ .ajax()

时间:2018-09-13 08:53:07

标签: ajax asp.net-mvc-5 ado.net datarow formcollection

我正在将MVC5与Ado.net数据表一起使用。我在控制器中有一个方法。我想使用ajax调用将表单数据发送到此方法。我想在创建新记录时在我的create动作中调用此方法,因此我可以将数据行中的数据行集合传递给同时创建多个记录。

这是我的方法的外观

    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()" />

运行项目时,我可以看到(填充)了数据行的前两个列字段(名称和长度)。但是,当程序进入“ Breadth”列时,它崩溃并给出错误( System.ArgumentException ...'Breadth'不属于表)。 我已经仔细检查了所有内容,但看不到我所缺少的内容。

1 个答案:

答案 0 :(得分:0)

上面的代码示例在创建表时在名称之后(即“宽度”而不是“宽度”)后面有一个空格;列名必须完全匹配。

在这3个名称后的空格:

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

更改为:

 =TEXT(WEEKDAY([Column1]), "dddd")