【问题标题】:ASP.NET MVC 5 doesn't update table rows and send details(with datatables)ASP.NET MVC 5 不更新表行并发送详细信息(带有数据表)
【发布时间】:2019-09-25 21:20:42
【问题描述】:

我想更新我的数据表行并发送提交。但不要更新,因为我的行数据发送 null。如何发送我选择行并更新行并提交。

 @model List<ASTek.Models.CustomersModel>
    @{
    ViewBag.Title = "Customers";
    Layout = "~/Views/Shared/_Layout.cshtml";
    }
     @using (Html.BeginForm("TopluSms", "Mobil", FormMethod.Post))
    {
    @Html.AntiForgeryToken()
    <table class="table table-striped table-bordered table-responsive" id="tblCustomer" style="font-size:11px; position:center">
        <thead>
            <tr style="background-color:#8c7fcf">
                <th>Müşteri</th>
                <th>Telefon</th>
                <th>Bakiye</th>
                <th></th>
                <th></th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>@Html.DisplayFor(modelItem => item.FirmaName)</td>                  
                    <td>@Html.TextBoxFor(modelItem => item.TLF)</td>
                    <td> @Html.EditorFor(modelItem => item.Bakiye)</td>
                    <td> @Html.DisplayFor(modelItem => item.LOGICALREF)</td>
                    <td>
                        @Html.CheckBoxFor(modelItem => item.IHTAR, new { style = "width:18px;height:18px;" })
                    </td>
                    <td>
                        <input id="@item.LOGICALREF" type="submit" value="Update" class="btn btn-info" />
                    </td>
                </tr>
            }
        <tbody>
    </table>
}

这个视图页面和我的控制器。我的数据库变量表名,我必须像那个 SQL 一样使用它,

 [HttpPost]
    public ActionResult TopluSms(CustomersModel model)
    {
        string LOGICALREF = model.LOGICALREF;
        string TLF = model.TLF;
        string active = "0";
        CustomersModel items = new CustomersModel();
        string a = User.Identity.Name;
        HomeController.sqlconnection con = new HomeController.sqlconnection();
        string firmsec = "UPDATE dbo.LG_005_CLCARD  SET TELNRS1='" + TLF + "',WARNFAXNR='" + active + "' where LOGICALREF=" + LOGICALREF + "";
        SqlCommand cmd = new SqlCommand(firmsec, con.connect());
        cmd.ExecuteNonQuery();
        con.connect().Close();
        return RedirectToAction("TopluSms");

    }

我的控制器选择列表并发送数据表。

 [HttpGet]
    public ActionResult TopluSms()
    {
        string aa = User.Identity.Name;
        HomeController.sqlconnection con = new HomeController.sqlconnection();
        string FIRMA = "select t.FIRMA,t.donem FROM dbo.TBLFRM as t where T.USERNAME='" + aa + "'";
        SqlCommand cmd = new SqlCommand(FIRMA, con.connect());
        SqlDataReader rdrr = cmd.ExecuteReader();
        rdrr.Read();
        string firma = rdrr["FIRMA"].ToString();
        string donem = rdrr["DONEM"].ToString();
        string Musteriler = "SELECT CLCARD.LOGICALREF, CLCARD.DEFINITION_ AS  UNVANI,CLCARD.TELNRS1, CAST((SUM((1 - CLFLINE.SIGN) * CLFLINE.AMOUNT) - SUM(CLFLINE.SIGN * CLFLINE.AMOUNT)) as DECIMAL(15, 2)) AS[BAKIYE],CLCARD.WARNFAXNR AS IHTAR " +
            "FROM dbo.LG_" + firma + "_" + donem + "_CLFLINE as CLFLINE INNER JOIN dbo.LG_" + firma + "_CLCARD as CLCARD ON CLFLINE.CLIENTREF = CLCARD.LOGICALREF AND CLFLINE.CANCELLED = 0 " +
            "GROUP BY CLCARD.LOGICALREF, CLCARD.CODE, CLCARD.DEFINITION_, CLCARD.ACTIVE, CLCARD.CITY, CLCARD.CAPIBLOCK_CREADEDDATE ,CLCARD.TELNRS1,CLCARD.WARNFAXNR " +
            "HAVING(CLCARD.CODE LIKE '%') and(CLCARD.DEFINITION_ LIKE '%') AND(CLCARD.ACTIVE = 0) " +
            "ORDER BY CLCARD.DEFINITION_ DESC ";
        // var model = new List<CustomersModel>();
        List<CustomersModel> items = new List<CustomersModel>();
        using (SqlCommand cmdd = new SqlCommand(Musteriler, con.connect()))
        {
            //con.connect().Open();
            SqlDataReader rdr = cmdd.ExecuteReader();

            while (rdr.Read())
            {

                var musteri = new CustomersModel();
                musteri.LOGICALREF = rdr[0].ToString();
                musteri.FirmaName = rdr[1].ToString();
                ViewBag.bakiye = rdr[3].ToString();
                musteri.TLF = rdr[2].ToString();
                musteri.Bakiye = rdr[3].ToString();
                if (rdr[4].ToString() == "1") { musteri.IHTAR = true; }
                else { musteri.IHTAR = false; }
                if (Convert.ToDouble(musteri.Bakiye) > 0)
                {
                    musteri.SIGN = "0";
                }
                else
                {
                    musteri.SIGN = "1";
                }
                items.Add(musteri);

            }
            con.connect().Close();
            return View(items);
        }
    }

I want to update datatable row

【问题讨论】:

  • 您是否正在检查将表单发送到控制器的浏览器的提琴手或网络检查?
  • 在你的循环中有很多同名的输入
  • 我要更新数据表行
  • 在表单中,您有多个 CustomersModel 对象。我建议您删除表单并在那里使用 ajax。当您单击按钮时,只需获取相关数据并将其发送到您的操作。
  • 我不知道该怎么做。我没用过ajax

标签: c# asp.net-mvc bootstrap-4


【解决方案1】:

您正在那里发送 List 的模型,但您的 Action TopluSms 是针对单个模型的。 但是,如果您将函数的 parameter 更改为 List&lt;CustomersModel&gt; models,这可能会起作用,但它不是执行此类操作的正确方法。

尝试使用任何前端网格管理框架,如KendoUIJQGrid 等。

阅读那里的文档并实施。他们将ajax 用于CRUD

并尝试关注任何Design Pattern 作为您的后端代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多