ASP.NET复选框不';我不知道它应该处于什么状态

ASP.NET复选框不';我不知道它应该处于什么状态,asp.net,html,Asp.net,Html,我今天注意到的一个有趣的现象是,如果复选框输入未选中,则它不会包含在回发变量中;否“xyzcheckbox:off”对应于“xyzcheckbox:on”备选方案(选中时) 如果复选框在服务器上隐藏,然后在以后显示,则会导致存储复选状态的问题;复选框不知道它是否只是隐藏(不在DOM中),或者是否根据浏览器发送回服务器的回发来取消选中它,因为如果未选中,回发不包括对复选框的引用 我遇到一个问题,我需要隐藏一个复选框(在复选框的父项上使用.Visible=false)并根据用户输入显示它,但由于上述

我今天注意到的一个有趣的现象是,如果复选框输入未选中,则它不会包含在回发变量中;否“xyzcheckbox:off”对应于“xyzcheckbox:on”备选方案(选中时)

如果复选框在服务器上隐藏,然后在以后显示,则会导致存储复选状态的问题;复选框不知道它是否只是隐藏(不在DOM中),或者是否根据浏览器发送回服务器的回发来取消选中它,因为如果未选中,回发不包括对复选框的引用

我遇到一个问题,我需要隐藏一个复选框(在复选框的父项上使用.Visible=false)并根据用户输入显示它,但由于上述问题,该状态无法保持

还有其他人遇到过这个问题吗?你是如何解决它的

注意:最明显的答案是隐藏客户端上的复选框(设置display:none),但这不是一个选项,因为我们正试图减少页面上的标记,以便回发更小

感谢迄今为止的反馈

谢谢:)

而不是使用.Visible(它从发出的标记中删除复选框,因此不可能在回发中),为什么不对其应用CSS类呢

CSS可以如下所示:

input.hidden {
  display: none;
}
在ASP.NET页面中,只需设置CssClass属性:

MyCheckbox.CssClass = "hidden";

您应该很好。

在标记中,您可以默认选择
selected=“false”


在代码隐藏中,您可以通过
mycheckbox.checked
确定状态,该复选框将返回
true
false

该状态是否应保留在viewstate中?@Ek0nomik否,请自己尝试。詹姆斯·约翰逊是的,我就是这么想的。。但是,IPostBackDataHandler如何知道用户是否正在更改值(通过取消选中该值)或者控件根本没有被呈现?当没有唯一ID的任何回发传入时,将触发OnCheckChanged事件,并将框设置回未检查状态。关于页面大小:简单使用压缩将比删除40到50字节的内容产生更大的影响?如果你打开了压缩,40+字节实际上可能只有5个。除非我们谈论的是每天数百万次的页面浏览量,否则这将不值得你花费时间。此外,如果这是一个大规模的事情,那么我建议只需将页面分解为可以在客户端上通过ajax动态加载的内容。@Chris Lively感谢Chris,我们实际上使用的是GZIP传输压缩和Viewstate压缩;正在折叠/隐藏的页面组件实际上相当大,因此它不仅隐藏/显示单个复选框,它还隐藏/显示页面中包含复选框的较大部分。这很好,但事实上,这首先成为问题的全部原因是因为我们正在优化页面,为了做到这一点,我们必须将其从DOM中完全移除;该页面用于在客户端存储所有内容,并通过javascript隐藏和显示内容,但该页面的大小可能超过2MB,这取决于用户填写的信息量。现在我们已经开始在服务器端隐藏内容,标记大小已减少到12KB,以表示同一页面(所有节点都折叠起来)好的-可能在问题中包含该细节,以避免进一步类似的答案。