我的复选框有问题。例如,我有这个aspx的代码
<asp:Content ID="MainContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:CheckBox ID="chkActive" AutoPostBack="True" OnCheckedChanged="Active_OnCheckedChanged" runat="server"></asp:CheckBox>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
</asp:Content>
在服务器端,当选中chkActive时,我有两个渲染控件:
当未选中chkActive时,我只有一个渲染控件:
所以我无法将该复选框的状态写入数据库。为了记录,我使用带有动态对象的SaveData函数,并且当未选中时chkActive消失,因此该函数无法找到它。任何想要复选框的想法都会出现,即使它未经检查?感谢。
P.S:&#34;消失了#34;意味着它在取消选中时不再出现在Request.Form中。编辑:
我的SaveData功能:
public void SaveDate<T>(T entity, NameValueCollection attributes)
{
PropertyInfo[] properties = typeof(T).GetProperties();
foreach (PropertyInfo property in properties)
{
if (attributes.AllKeys.Any(key => key.Contains("$" + property.Name)))
{
//
}
}
}
para属性来自Request.Form,因为复选框不再出现在Request.Form中,所以我不知道如何处理它。如果选中复选框
,此功能很有效答案 0 :(得分:1)
ASP.NET使用浏览器的本机form
功能将数据返回给服务器。
当您“选中”一个复选框时,数据将作为Request.Form
数据的一部分传回,然后ASP.NET可以将此信息用作其后期生命周期的一部分,以便知道复选框是“检查”。
但是,如果复选框不“已选中”,那么不会在Request.Form
数据中输入一个条目 - 这就是ASP缺少的数据.NET使用知道不再检查复选框。
这是复选框作为表单发布的一部分的正常行为。
答案 1 :(得分:1)
正如其他人所提到的,复选框(未选中)的值不会发送回服务器,因此它不会显示在Request.Form
集合中。
但是......在你的函数中,use可以使用服务器端对象,因为值是在ViewState中回发的(如果你已经将它打开)。
在客户端取消选中并提交后, this.chkActive.Checked
在回发时应为false。
如果您仍想使用Request.Form
,您可以随时查看该条目是否存在于该集合中。如果不存在,则复选框为false或未选中。
if(Request.Form["chkActive"] == null)
// checkbox is unchecked
else
// checkbox is checked
修改强> 的
要使复选框显示在Request.Form
集合中,只需在表单中添加隐藏的输入,并为其指定与复选框相同的名称。
<input type="hidden" value="false" name="chkActive" />
向复选框的OnClick事件添加客户端事件处理程序。选中后,将隐藏输入的disabled属性设置为true。取消选中时,将disabled属性设置为false。禁用的控件不会像未选中的复选框一样发送回服务器,因此如果选中该复选框,则应禁用输入,反之亦然。
答案 2 :(得分:0)
复选框在未选中时没有任何值,因此浏览器不会将它们包含在返回的字段中。这与ASP.NET无关,而是与HTML表单的工作方式有关。
但是,ASP.NET WebForms控件复选框知道它们的状态(感谢viewstate)并指示它们是否被选中,只是直接查询checkbox对象而不是使用Request.Form集合,如下所示:
if( this.chkActive.Checked ) { ...