Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不能取消选中复选框。ASP.NET_C#_Asp.net - Fatal编程技术网

C# 不能取消选中复选框。ASP.NET

C# 不能取消选中复选框。ASP.NET,c#,asp.net,C#,Asp.net,问题很可能是查询字符串。当我从一个搜索页面转到另一个搜索页面时,一切都崩溃了。我使用QueryString来选中在生成结果页面之前选中的所有框。这一次我可以取消选中复选框,但只能在视觉上取消选中。结果页面将被生成,就好像它们仍然被选中一样 下面是一个简单的例子。我已经添加了复选框和一个按钮 protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["B1"] != null) {

问题很可能是查询字符串。当我从一个搜索页面转到另一个搜索页面时,一切都崩溃了。我使用QueryString来选中在生成结果页面之前选中的所有框。这一次我可以取消选中复选框,但只能在视觉上取消选中。结果页面将被生成,就好像它们仍然被选中一样

下面是一个简单的例子。我已经添加了复选框和一个按钮

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString["B1"] != null)
    {
        CheckBox1.Checked = true;
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    string QString = null;
    if (CheckBox1.Checked)
    {
        QString += "?B1=1";
    }
    Response.Redirect("/TestPage1.aspx" + QString);
}
如果我转到Default.aspx并添加“?B1=1”(Default.aspx?B1=1),我将得到选中复选框的页面。如果我取消选中并按下按钮1,我将被重定向到页面“TestPage1.aspx?B1=1”


有人能解决这个问题吗?

如果我理解正确,您在TestPage1上选中了复选框(
/TestPage1.aspx?B1=1
),当您手动取消选中复选框并单击按钮1时,您将返回到
/TestPage1.aspx?B1=1
,此时复选框将重新检查

这是因为在控制事件(如按钮1的
OnClick
事件)之前引发
Page\u Load
事件。详细说明页面生命周期事件

由于您的页面正在发回到
/TestPage1.aspx?B1=1
,因此
页面加载
处理程序会在
按钮1\u单击
之前看到查询字符串。当
按钮1\u单击
处理程序运行时,复选框已经被重新检查,处理程序重定向回相同的url,包括查询字符串

对于您的示例,一个简单的解决方案是检查
页面加载
事件中的
IsPostBack
属性,并且仅在页面未发回时选中复选框

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack && Request.QueryString["B1"] != null)
    {
        CheckBox1.Checked = true;
    }
}
事情是这样的:

  • 您已经在浏览器中加载了
    /TestPage1.aspx?B1=1
  • 在浏览器中取消选中
    复选框1
    ,然后单击
    按钮1
  • Page\u Load()
    在服务器上运行完整的
    /TestPage1.aspx?B1=1
    地址。它会看到
    B1
    查询字符串,因此
    CheckBox1
    被设置为再次选中
  • 按钮1\u Click()
    在服务器上运行。它看到现在选中了
    CheckBox1
    ,因此
    QString
    再次包含
    B1
    。服务器现在重定向到
    /TestPage1.aspx?B1=1
    (仍然包含完整的查询字符串)
  • Page\u Load()
    再次运行,
    复选框1
    再次设置为选中状态
  • 页面最终被发送回浏览器,您观察到
    Checkbox1
    现在处于选中状态
  • 如果浏览器中只有
    TestPage1.aspx
    (没有
    ?B1=1
    ),则可以不选中该复选框。但只要该
    ?B1=1
    存在,事件循环总是会再次将其放回

    这里最常见的错误是没有预料到第3步。请记住,任何服务器事件(即使是简单的按钮单击)都会作为操作的一部分运行。
    您可以通过更改
    页面加载()
    以在设置复选框之前包含
    !IsPostBack()
    测试来帮助实现这一点。

    复选框和单选按钮在asp.net中有很多错误。请签出此线程: