【问题标题】:Cant uncheck checkbox. ASP.NET不能取消选中复选框。 ASP.NET
【发布时间】:2016-12-08 12:50:18
【问题描述】:

问题很可能出在 QueryString 上。当我从结果页面返回搜索页面时,一切都崩溃了。我使用 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) 我会得到选中复选框的页面。如果我取消选中它并按下 Button1,我将被重定向到页面“TestPage1.aspx?B1=1”

有没有人能解决这个问题?

【问题讨论】:

标签: c# asp.net


【解决方案1】:

如果我理解正确,您在 TestPage1 上选中了复选框 (/TestPage1.aspx?B1=1),当您手动取消选中该复选框并单击 Button1 时,您将返回到 /TestPage1.aspx?B1=1,并且该复选框现在被重新选中。

这是因为 Page_Load 事件在控件事件(例如 Button1 的 OnClick 事件)之前引发。 Here is the MSDN documentation 详细说明页面生命周期事件。

由于您的页面正在回发到/TestPage1.aspx?B1=1Page_Load 处理程序会在Button1_Click 有机会将其删除之前看到查询字符串。到 Button1_Click 处理程序运行时,复选框已被重新选中,并且处理程序重定向回相同的 url,包括查询字符串。

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

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

【讨论】:

    【解决方案2】:

    是这样的:

    1. 您的浏览器中加载了/TestPage1.aspx?B1=1
    2. 您在浏览器中取消选中CheckBox1,然后单击Button1
    3. Page_Load() 在服务器上运行以获取完整的 /TestPage1.aspx?B1=1 地址。它看到了B1 查询字符串,因此CheckBox1 再次设置为已选中。
    4. Button1_Click() 在服务器上运行。它看到CheckBox1 现在被选中,所以QString 再次包含B1。服务器现在重定向到/TestPage1.aspx?B1=1(仍然包含完整的查询字符串。
    5. Page_Load() 再次运行,CheckBox1 再次设置为选中状态。
    6. 页面最终被发送回浏览器,您观察到Checkbox1 现在已被选中。

    如果您在浏览器中只有TestPage1.aspx(没有?B1=1),您可以不选中该复选框。但只要?B1=1 存在,事件的循环总会把它拉回来。

    这里最常见的错误是不要期待第 3 步。请记住,任何服务器事件(即使是简单的按钮单击)都是作为 full page lifecycle 的一部分运行的。 您可以通过在设置复选框之前更改 Page_Load() 以包含 !IsPostBack() 测试来帮助解决此问题。

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 1970-01-01
      • 2016-05-26
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 2015-01-15
      相关资源
      最近更新 更多