C# 通过在asp.net中取消选中复选框,复选框消失
我对复选框有问题。例如,我有这个aspx的代码C# 通过在asp.net中取消选中复选框,复选框消失,c#,asp.net,web-applications,C#,Asp.net,Web Applications,我对复选框有问题。例如,我有这个aspx的代码 <asp:Content ID="MainContent" ContentPlaceHolderID="MainContent" runat="server"> <asp:CheckBox ID="chkActive" AutoPostBack="True" OnCheckedChanged="Active_OnCheckedChanged" runat="server"></asp:CheckBox>
<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时,我有两个渲染控件:
- ctl00$MainContent$chkActive
- ctl00$MainContent$txtName
- ctl00$MainContent$txtName
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)))
{
//
}
}
}
public void保存日期(T实体,NameValueCollection属性)
{
PropertyInfo[]properties=typeof(T).GetProperties();
foreach(属性中的PropertyInfo属性)
{
if(attributes.AllKeys.Any(key=>key.Contains(“$”+property.Name)))
{
//
}
}
}
para属性来自Request.Form,因为复选框不再位于Request.Form中,所以我不知道如何处理它。如果选中复选框,此函数将正常工作。ASP.NET使用浏览器的本机
表单功能将数据返回到服务器
当您“选中”复选框时,数据将作为请求的一部分传回。表单
数据,然后ASP.NET可以将此信息用作其回发生命周期的一部分,以知道复选框已“选中”
但是,如果复选框是未选中的“已选中”,则未在请求表单
数据中有一个条目-正是由于缺少数据,ASP.NET才知道复选框不再被选中
这是表单过帐中复选框的正常行为。未选中复选框时,复选框没有任何值,因此浏览器不会将其包含在返回的字段中。这与ASP.NET无关,而是与HTML表单的工作方式有关
但是,ASP.NET WebForms控件复选框知道它们的状态(感谢viewstate),并将指示它们是否被选中,只需直接查询复选框对象,而不使用请求。表单集合,如下所示:
if( this.chkActive.Checked ) { ...
正如其他人所提到的,复选框(未选中)的值不会发送回服务器,因此它不会出现在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事件中。选中后,将隐藏输入的“禁用”属性设置为true。取消选中时,将禁用属性设置为false。禁用的控件不会像未选中的复选框一样发送回服务器,因此如果选中该复选框,则应禁用输入,反之亦然。所说的“消失”是指,它不在回发时的请求中。表单收集中?@ChrisGessler:是的,确实,它不在请求中。如果未选中,则不再是表单。有什么想法吗?感谢不在请求中。表单与呈现的控件无关。向我们介绍正在生成的HTML。您好,谢谢,现在我了解了更多有关复选框行为的信息。当复选框未选中时,您是否知道任何解决方案或解决方法来处理复选框?Thanks@Qui,我不能100%肯定我理解你所说的“处理复选框”是什么意思。你是在说服务器端还是客户端?正如Dai和Chris所回答的,您可以检查控件的.Checked
属性。。。但是这只会在表单属性在生命周期中被处理后才起作用,换句话说,在页面加载中或之后。谢谢,我明白了它们的意思。我编辑了我的问题,所以也许我的意思更清楚。我编辑了我的问题,请看一下。谢谢你的帮助。我编辑了我的问题,也许你会发现我的意思更清楚。谢谢你按照你的建议做了,
,然后我使用了
document.getElementById(“hiddenExtern”).disabled=true | false
,但它不起作用,因为disabled属性不适用于hidden类型。谢谢。@QuiTran-隐藏的输入字段确实支持disabled属性。检查这篇帖子-嗨,我成功了。我仍然使用隐藏的输入,并在SaveData函数中处理其名称,以将复选框的状态保存到DB。谢谢你的帮助:)