【发布时间】:2014-09-26 19:52:37
【问题描述】:
我在Repeater 控件中有一个复选框列,即使我在第一次加载页面时只使用了一次绑定,它也不会保持状态。每次它返回 Checked=True 时,即使我取消选中它。这是代码。
这是 .aspx 代码
<asp:Repeater ID="rptCols" runat="server" onitemdatabound="rptCols_ItemDataBound" >
<HeaderTemplate>
<table width="200px" border="1" id="tblRpt" style="background-color:White;border-color:#CCCCCC;border-width:1px;border-style:None;font-family:Arial;font-size:X-Small;width:180px;border-collapse:collapse;">
<tr>
<th>COLUMN</th>
<th colspan="2"> </th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr runat="server" id="tblRow">
<td><asp:Label id="lblCol" runat="server" Text= '<%# Eval("Col1")%>'></asp:Label> </td>
<td><asp:CheckBox id="chkSelect" runat="server" Checked= '<%# Convert.ToBoolean(Eval("Col2")) %>'/></td>
<td style="visibility:hidden"><asp:Label ID ="lblHidCol" runat="server" Text='<%# Eval("Col3") %>' /></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
这是背后的 aspx.cs 代码
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!Page.IsPostBack)
{
FillColsGrid(false); //Binding only once..
}
}
catch (Exception ex)
{
this.lblException.Text = ex.Message.ToString() ;
}
}
我想使用此按钮事件获取复选框的当前状态,该事件不起作用,在第一次加载页面时返回相同的状态:
protected void wibHideShow_Click(object sender, EventArgs e)
{
List<UserSettings> lstColsGrid = new List<UserSettings>();
string sUser = Session["UserId"].ToString();
foreach (RepeaterItem item in rptCols.Items)
{
if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
{
UserSettings us = new UserSettings();
Label lblColName = item.FindControl("lblCol") as Label;
CheckBox chkSel = item.FindControl("chkSelect") as CheckBox; //Here is the issue
Label hidAppName = item.FindControl("lblHidCol") as Label;
us.BemsId = sUser;
us.ApplicationName = hidAppName.Text;
us.ColumnName = lblColName.Text;
us.ColumnValue = chkSel.Checked.ToString();
us.LastUpdateDate = System.DateTime.Now;
lstColsGrid.Add(us);
}
}
rptCols.DataSource = LoadColsDataSet(lstColsGrid);
rptCols.DataBind();
}
有人可以帮忙吗?
【问题讨论】:
-
删除了我的其他答案,因为问题出在其他地方,我怀疑这可能是因为您的转发器在回发时重新绑定。尝试从中继器中的复选框中删除 Eval,只是为了测试,然后查看当您选中和取消选中时是否可以从复选框中获得正确的状态。您可以在代码隐藏中绑定 OnItemDataBound 中的值,而不是使用 Eval
-
我从 rptCols_ItemDataBound 事件中删除了 Eval 并为每个字段分配了值。问题保持不变。当我取消选中并进行回发时,当我遍历按钮单击事件中的每个项目时,该值不会反映在回发中。
-
您是否尝试过中断并单步执行回发/页面加载并检查当时您的转发器的值?您还可以检查 Request.Form 以查看实际发布到服务器的内容 - 通过浏览器工具或 page_init/pageload。
-
是的,也尝试过 Request.Form,没有运气。
-
并且正确的值实际上是在表单对象中发送到服务器的吗?