我在这里和那里阅读了一些与隐藏字段相关的问题/答案,但没有一个能够真正解决我的疑问。我认为这个问题并没有直接与viewstate相关,也没有及时绑定我的数据,因为我的其他控件保留了它们的值,这些值与我在隐藏域值时同时绑定的值相同。 请注意,我结合<%#的eval(“ProgramID”)%>到hiddenfield值和标记文本字段:ASP.NET隐藏字段值在回传后不会持续
我使用ASP的中继器,并使用服务器端的标签,如下面结合表中的值生成表格。
<asp:Repeater ID="RpPrograms" runat="server" EnableViewState="True">
<HeaderTemplate>
<table id="tablePrograms" class="display">
<thead>
<tr>
<th>Checkbox</th>
<th>Program</th>
<th>Company Name</th>
</tr>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<div id='<%# "ProgramCbxCol_" + Eval("ProgramID").ToString()%>'>
<asp:checkbox runat="server" ID="cbxProgram" />
<asp:HiddenField ID="hdnProgramID" runat="server" Value='<%# Eval("ProgramID")%>' />
<asp:HiddenField ID="hdnProgramTagName" runat="server" Value='<%# Eval("Program") + "(" + Eval("CompanyName") + ")"%>'/>
</div>
</td>
<td><asp:label runat="server" ID="ProgramName" Text='<%# Eval("Program") + "(" + Eval("ProgramID").ToString() + ")"%>'></asp:label></td>
<td><%#Eval("CompanyName")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
页面第一次加载时,包括隐藏字段值在内的所有值都被正确绑定。然而,在页面回发后(通过点击一个保存按钮,我通过从隐藏域获取值来保存选中的复选框),所有的隐藏域值都消失了。尽管如此,在回发之后,我使用服务器端标记绑定的其他数据仍然可用。 (公司名称,程序都可用。)
我做了一个测试,将ProgramID绑定到asp标签的文本字段。事实证明,与隐藏字段ProgramID不同,此ProgramID在回发后保持不变。这证明这个问题与绑定数据太迟无关。也许不会与视图状态相关,但我不确定。我认为是特别与asp隐形领域有关的东西。
有人能解决这个谜团吗?为什么隐藏字段值在回发后不能保留?
现在,我对解决这个问题在保存(点击)事件之后再次绑定我的数据。但是,如果隐藏域值在回发之后仍然存在,则完全没有必要。 – CYC0616