繁体   English   中英

How to insert HTML table data into SQL Server in a single batch by using jquery ajax and structured parameter with ASP.NET MVC controller

[英]How to insert HTML table data into SQL Server in a single batch by using jquery ajax and structured parameter with ASP.NET MVC controller

如何为这个 ajax function 和 Z9778840A0100CB30C52ZB7 服务器存储过程制作 controller 操作方法:76410CB30C52ZB7

<script type="text/javascript">
        // event to fire on Save button click //
        $(document).on('click', '#btnSave', function () {
            var data = HTMLtbl.getData($('#example-1'));
            var parameters = {};
            parameters.array = data;

            var request = $.ajax({
                async: true,
                cache: false,
                dataType: "json",
                type: "POST",
                traditional: true,
                contentType: "application/json; charset=utf-8",
                url: "/index/SaveData",
                data: JSON.stringify(parameters)
            });
        });

Function 将 HTML 表转换为锯齿状数组以及如何在 controller 中生成操作结果

        var HTMLtbl =
        {
            getData: function (table) {
                var data = [];
                table.find('tr').not(':first').each(function (rowIndex, r) {
                    var cols = [];
                    $(this).find('td').each(function (colIndex, c) {

                            cols.push($(this).text().trim());                                // get td Value
                    });
                    data.push(cols);
                });
                return data;
            }
        }
    </script>

在 aspx web 表单中,我使它与 webmethod 一起使用:

public static string SaveData(string[][] array)
{
    string result = string.Empty;

    try
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Month");
        dt.Columns.Add("Week");
        dt.Columns.Add("Area");

        foreach (var arr in array)
        {
            DataRow dr = dt.NewRow();
            dr["Month"] = arr[0];
            dr["Week"] = arr[1];
            dr["Area"] = arr[2];

            dt.Rows.Add(dr);
        }
    }

然后我使用 SQL 服务器存储过程一次插入:

SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "proc_one";
cmd.Connection = cnn;

cmd.Parameters.Add("@TableType", SqlDbType.Structured).SqlValue = dt;

result = cmd.ExecuteNonQuery().ToString();

现在我得到 Request failed: parsererror 与此代码:

     [HttpPost]
    public JsonResult SaveData(string array)
    {


        using (MY_DB_1Entities dc = new MY_DB_1Entities())
        {
            if (array != null && array != "")
            {
                //Edit 
           Employee emp = JsonConvert.DeserializeObject<Employee>(array);
                dc.Employees.Add(emp);
                dc.SaveChanges();

            }

        }
        return Json(false, JsonRequestBehavior.DenyGet);

    }

当我从 ajax 关闭数据类型:json 时,我得到行保存未定义

由于您要发送JSON字符串,只需将其parse/deserialize化到您的 POCO object 中并保存即可。

[HttpPost]
public JsonResult SaveData(string json){  //take the JSON string
    dynamic myTableData = JObject.Parse(json);   // parse it or de-serialize it into your VM / POCO, or just use the dynamic myTableData  above

...
//var temp = myTableData.prop1;
return Json(false, JsonRequestBehavior.AllowGet);

}


然后将其保存到您的数据库中。rest 是直截了当的。


根据附加问题更新:

获取您的类型信息并使用实体框架工作,然后保存

  1. Employee emp = JsonConvert.DeserializeObject<Employee>(jsonString);
  2. db.Employees.Add(emp);
  3. db.SaveChanges(); 这将保存它,你就完成了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM