我在这里和那里读了几个隐藏的字段相关的问题/答案,但没有一个能真正解决我的怀疑。我不认为问题与viewstate直接相关或者没有足够早地绑定我的数据,因为我的其他控件保留了我的值,我和hiddenfield值同时绑定了它们。
我正在使用asp转发器生成一个表,并使用服务器端标签绑定表值,如下所示: 请注意,我正在绑定<%#Eval(“ProgramID”)%>到隐藏字段值和标记文本字段。
<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在回发后仍然存在。这证明问题与绑定数据无关。也可能与viewstate无关,但我不确定。我认为特别是与asp hiddenfield相关的东西。
有人可以解开这个谜吗?回发后为什么隐藏字段值不会持续存在?
答案 0 :(得分:-1)
我尝试了你的代码,但我似乎无法获得相同的行为。对我来说,HiddenFields是持久的,就像你想要的那样。我认为你需要包含一些代码来提供代码,以便能够看到是否存在奇怪的事情。
我将提供我的测试代码,以便您查看:
我的观点:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Webtest.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<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>
<asp:Button runat="server" Text ="Save"/>
</div>
</form>
</body>
</html>
我的代码隐藏:
using System;
using System.Collections.Generic;
namespace Webtest
{
public partial class WebForm1 : System.Web.UI.Page
{
private List<ProgramData> _programData = new List<ProgramData>
{
new ProgramData {ProgramID = 1, Program = "Program abc", CompanyName = "Company 3434"},
new ProgramData {ProgramID = 2, Program = "Program def", CompanyName = "Company 3qa2434"},
};
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
RpPrograms.DataSource = _programData;
RpPrograms.DataBind();
}
}
}
public class ProgramData
{
public int ProgramID { get; set; }
public string Program { get; set; }
public string CompanyName { get; set; }
}
}