【发布时间】:2020-03-06 17:24:42
【问题描述】:
我正在使用列表视图来显示数据库中的各种列/行。其中一列是“id”,对用户隐藏。另一列是一个复选框,用户可以单击该复选框以“选择任务”。
<asp:ListView ID="listViewDataSource" ConvertEmptyStringToNull="true" ItemPlaceholderID="itemPlaceholder" runat="server" DataKeyNames="id,intFrmID" SelectedIndex="0">
然后在ItemTemplate中:
<tr runat="server">
<td class="hidden">
<asp:Label ID="id" runat="server" Text='<%#Eval("id") %>' />
</td>
<td>
<asp:CheckBox ID="check" runat="server" OnCheckedChanged="check1_CheckedChanged" AutoPostBack="True" Checked='<%# (bool)Eval("bitIsPickedUp") %>' />
<asp:Label ID="CheckLabel" runat="server" Text='<%#Eval("bitIsPickedUp") %>' />
</td>
当有人点击该复选框时,我想在数据库中创建一条新记录。为此,我需要获取隐藏的“id”字段并将其传递给添加记录的函数。
protected void check1_CheckedChanged(object sender, EventArgs e)
{
//in here, I want to get the id, which I should be able to use listViewDataSource.SelectedDataKey but the datakey has one value and it's not correct, makes me think it's being cached somehow?
var datakey = listViewDataSource.SelectedDataKey;
CheckBox chk = (CheckBox)item.FindControl("bitIsPickedUp");
}
我对 Web 表单和使用 ListView 不是非常熟悉,因此非常感谢您的帮助。
【问题讨论】:
-
您使用的是
<asp:HiddenField />吗? -
@JohnPete22 不,只是隐藏它。
-
你的 ListView 是动态创建的吗?这意味着,它需要在 PostBacks 上再次进行数据绑定。只是一个想法。
-
@JohnPete22 是的,它是动态创建的。
-
要验证您是否需要重新绑定... 调试,然后在 PostBack 上查看即时窗口中的
listViewDataSource,或者在到达该行时将鼠标悬停在变量上代码。查看Items集合,看看它是否真的有任何项目。如果没有,你知道你需要重新绑定。