【问题标题】:ASP.NET MVC ADO.NET Query per table rowASP.NET MVC ADO.NET 查询每个表行
【发布时间】:2018-04-30 04:57:13
【问题描述】:

我有这张桌子:

如果我单击按钮,我想将每行的表传递给控制器​​,然后每行执行 ADO.NET 查询,例如执行“UPDATE tbluser SET note='INACTIVE' WHERE id=@id”每行。

这样做的主要目的之一是当我过滤表格时,只会传递可见的行。

我这里已经有一个代码可以使用 AJAX 传递给控制器​​,但我不知道之后该怎么做。

JS:

var HTMLtbl =
{
    getData: function (table) {
        var data = [];
        oTable.rows({ search: 'applied' }).every(function () {
            var cols = [];
            var rowNode = this.node();
            $(rowNode).find("td").each(function () {
                cols.push($(this).text().trim() || null);
            });
            data.push(cols);
        });
        return data;
    }
}


$("btnSubmit").on("click", function () {
    var data = HTMLtbl.getData($(".datatable"));
    var parameters = {};
    parameters.array = data;

    var request = $.ajax({
        async: true,
        cache: false,
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Home/SubmitTable",
        data: JSON.stringify(parameters),
        success: function () {
            window.location.href = "/Home/Index";
        }
    });

    request.fail(function (jqXHR, textStatus) {
        alert("Request failed: " + textStatus);
    });
});

控制器:

[HttpPost]
public JsonResult SubmitTable(string[][] array)
{
    //I don't know what to do here now, please help 
}

我的解决方案基于穆斯塔法的回答:

JS:

var HTMLtbl =
{
    getData: function () {
        var data = [];
        oTable.rows({ search: 'applied' }).every(function () {
            var cols = [];
            var rowNode = this.node();
            $(rowNode).find("td").each(function () {
                cols.push($(this).text().trim() || null);
            });
            data.push(cols);
        });
        return data;
    }
}

$("#btnSubmit").on("click", function () {
    var data = HTMLtbl.getData($(".datatable"));
    var parameters = {};
    parameters.array = data;

    var request = $.ajax({
        async: true,
        cache: false,
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Home/SubmitTable",
        data: JSON.stringify(parameters),
        success: function () {
            window.location.href = "/Home/Index";
        }
    });

    request.fail(function (jqXHR, textStatus) {
        alert("Request failed: " + textStatus);
    });
});

控制器:

[HttpPost]
    public JsonResult SubmitTable(string[][] array)
    {
        string result = string.Empty;
        try
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);
            con.Open();
            foreach (var arr in array)
            {
                SqlCommand cmd = new SqlCommand("UPDATE tbluser SET remark='INACTIVE' WHERE id = @id", con);
                cmd.Parameters.AddWithValue("@id", arr[0]);
                cmd.ExecuteNonQuery();
            }
            con.Close();
        }
        catch (Exception ex)
        {
            result = ex.Message;
        }
        return Json("Records updated successfully.", JsonRequestBehavior.AllowGet);
    }

我现在可以将它用于更复杂的东西,谢谢

【问题讨论】:

    标签: javascript c# sql-server ajax asp.net-mvc


    【解决方案1】:

    如果您想更新自定义行,您可以为每一行添加一个带有自定义文本和图标的按钮,然后为该按钮添加一个“data-”属性并为您的行 ID 设置路径,

    <input type="button" data-rowId="1" class="changeActivationState">activate</input>
    

    在这个例子中,我在我的输入中添加了一个数据字段,然后我定义了这个 javascript 方法:

      $(".changeActivationState").click(function(){
        $(this).data("rowId")//get the selected row id and call you service 
      });
    

    使用此代码,您可以读取每行的第一个元素并为所有行执行 Web 服务调用

      var arr = [];
      $("#yourtable tr").each(function(){
          arr.push($(this).find("td:first").text()); //put elements into array
      });
    

    使用此代码,您可以将所有行读入一个 json 对象

     var tbl = $('#yourtable tr').map(function() {
        return $(this).find('td').map(function() {
        return $(this).html();
       }).get();
     }).get();
    

    假设您将列表传递给操作

      int[] passedIDsfromBrowser = ///filled with data that comes from browser;
      SqlConnection connection = ....
      SqlCommand command = new SqlCommand(connection);
      command.CommandText = "Update MYTABLENAME Set Active = true where ID in (" string.Join(",", passedIDsfromBrowser ) + ")";
       connection.Open();
       command.ExecuteNonQuery();
       connection.Close();
    

    这是一个伪代码。 或者如果你想要一个循环并用循环更新每一行

      SqlConnection connection = ....
      SqlCommand command = new SqlCommand(connection);
      connection.Open();
      for(int i = 0 ; i < passedIDsfromBrowser.Length; i++){
         command.CommandText = "YOURQUERY";
         command.ExecuteNonQuery();
      }
      connection.Close();
    

    【讨论】:

    • 感谢您的回答,但这不是我想要的答案。
    • 你想同时传递所有行吗?
    • 我想对每一行执行一次查询
    • 好的,我添加了一些额外的代码来显示如何读取第一列以及如何读取所有行和列
    • 很好,我把它们放在一个 json 对象上之后,我怎样才能对它们中的每一个执行 ADO.NET 查询?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多