C# Web应用报错:'CheckBox2'在当前上下文中不存在,事件生成异常
解决ASP.NET CheckBox事件处理及控件引用问题
先给你揪出最显眼的问题——你的事件处理程序参数写错了!CheckBox的OnCheckedChanged事件对应的参数应该是EventArgs,而不是DataListCommandEventArgs,这就是为啥你双击复选框生成不了正确处理程序、手动写还出问题的核心原因之一。
第一步:修正事件处理程序的参数
把后台代码改成下面这样,参数类型要匹配:
protected void CheckBox1_CheckChanged(object sender, EventArgs e) { CheckBox2.Checked = false; CheckBox3.Checked = false; CheckBox4.Checked = false; CheckBox5.Checked = false; }
同时别忘了给前台的CheckBox加上AutoPostBack="true",不然勾选的时候不会触发回发执行这个方法:
<asp:CheckBox ID="CheckBox1" runat="server" Text="Yes" OnCheckedChanged="CheckBox1_CheckChanged" AutoPostBack="true" />
第二步:解决"CheckBox2不存在于当前上下文"的错误
这个报错说明后台代码找不到这些控件,分两种情况处理:
- 情况1:CheckBox2-5压根没在前台页面定义
你得先在Default.aspx里添加这些复选框的标记,比如:
<asp:CheckBox ID="CheckBox2" runat="server" Text="Option 2" /> <asp:CheckBox ID="CheckBox3" runat="server" Text="Option 3" /> <asp:CheckBox ID="CheckBox4" runat="server" Text="Option 4" /> <asp:CheckBox ID="CheckBox5" runat="server" Text="Option 5" />
添加完重新编译项目,后台就能识别这些控件了。
- 情况2:CheckBox2-5在DataList/GridView这类命名容器里
如果这些复选框是放在数据绑定控件里的,直接用ID引用肯定找不到,得通过容器去查找。比如在DataList里的话,可以这么写:
// 假设你的DataList ID是MyDataList foreach (DataListItem item in MyDataList.Items) { CheckBox cb2 = (CheckBox)item.FindControl("CheckBox2"); if (cb2 != null) cb2.Checked = false; CheckBox cb3 = (CheckBox)item.FindControl("CheckBox3"); if (cb3 != null) cb3.Checked = false; // 同理处理CheckBox4、CheckBox5 }
第三步:确保页面与后台代码的关联正确
有时候页面顶部的Page指令写错也会导致控件找不到,检查一下Default.aspx的顶部:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
要保证CodeFile指向正确的后台文件,Inherits和后台类的名称一致(后台类应该是public partial class _Default)。
最后,清理一下项目(右键项目→清理)再重新生成,应该就能解决这些问题了。
内容的提问来源于stack exchange,提问作者SJ10
相关产品推荐
相关产品推荐

