HTML表绑定问题

本文关键字:问题 绑定 HTML | 更新日期: 2023-09-27 18:17:18

我有一个动态绑定表的函数,代码如下。我在页面加载中调用这个函数。调用此方法后,表包含三列:复选框、标签和文本框。

我也有一个按钮控件。当这个按钮被单击时,我正在检查表内的复选框,然后将数据插入到数据库中对应的复选框。

问题在于,当单击按钮时,它没有存储复选框的选中状态,因为单击按钮也会调用页面加载,这将调用下面的函数,因此表中的所有元素都将被重新创建。

我不能使用Page。这里是IsPostBack,因为当按钮被点击时,表格应该被加载。如果我在If (!Page.IsPostBack)中编写下面的代码,那么在按钮单击时,它不会在表

中找到任何行
try
{
    ManageVIN objMngVin = new ManageVIN();
    DataTable tblVins = objMngVin.MyFunction(clientCode);
    if (tblAssociateFleet.Rows.Count > 1)
    {
        for (int i = 1; i <= tblAssociateFleet.Rows.Count - 1; i++)
        {
            tblAssociateFleet.Rows[i].Cells.Clear();
        }
    }
    if (tblVins != null && tblVins.Rows.Count > 0)
    {
        foreach (DataRow dr in tblVins.Rows)
        {
            HtmlTableRow tblRow = new HtmlTableRow();
            tblRow.Attributes.Add("class", "tblrow");
            HtmlTableCell tblCell1 = new HtmlTableCell();
            CheckBox chk = new CheckBox();
            chk.CssClass = "selctChk";
            if (!Page.IsPostBack)
            {
                chk.Checked = false;
            }
            tblCell1.Controls.Add(chk);
            HtmlTableCell tableCelll2 = new HtmlTableCell();
            Label lblVinVlaue = new Label();
            lblVinVlaue.Text = Convert.ToString(dr["VIN"]);
            tableCelll2.Controls.Add(lblVinVlaue);
            HtmlTableCell tableCell3 = new HtmlTableCell();
            TextBox txtVinVal = new TextBox();
            txtVinVal.CssClass = "textEntry";
            tableCell3.Controls.Add(txtVinVal);
            tblRow.Cells.Add(tblCell1);
            tblRow.Cells.Add(tableCelll2);
            tblRow.Cells.Add(tableCell3);
            tblAssociateFleet.Rows.Add(tblRow);
        }
    }
}

我该如何处理这个问题?

HTML表绑定问题

您应该在Init或PreInit生命周期中执行此操作。根据ms的说法,PreInit是首选的位置。. NET页面生命周期加载有点太晚了(特别是缺少IPostBackDataHandler)。LoadPostData(处理复选框点击的回发数据)。

听起来你这样做很接近正确。

但是,我看到了一个问题。你有一个语句块:
if (!Page.IsPostBack)
{
  chk.Checked = false;
}

完全删除该块。问题是,在回发时,asp.net实际上渲染页面两次。在第一次渲染时,这一行正在杀死复选框的状态。

我知道Hexxagonal说要在生命周期的init或preinit部分这样做,但是,我们有很多页面动态生成控件。对于这些,我们总是在page_load中处理生成,它工作得很好。