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);
}
}
}
我该如何处理这个问题?
您应该在Init或PreInit生命周期中执行此操作。根据ms的说法,PreInit是首选的位置。. NET页面生命周期加载有点太晚了(特别是缺少IPostBackDataHandler)。LoadPostData(处理复选框点击的回发数据)。
听起来你这样做很接近正确。
但是,我看到了一个问题。你有一个语句块:if (!Page.IsPostBack)
{
chk.Checked = false;
}
完全删除该块。问题是,在回发时,asp.net实际上渲染页面两次。在第一次渲染时,这一行正在杀死复选框的状态。
我知道Hexxagonal说要在生命周期的init或preinit部分这样做,但是,我们有很多页面动态生成控件。对于这些,我们总是在page_load中处理生成,它工作得很好。