【问题标题】:Why is checkbox state in CheckChanged handler always true为什么 CheckChanged 处理程序中的复选框状态始终为 true
【发布时间】:2014-10-29 18:42:20
【问题描述】:

我有一个复选框,我已按以下方式声明

checkbox = new CheckBox();
checkbox.ID = "AreaGroup";
checkbox.AutoPostBack = true;
checkbox.CheckedChanged += new System.EventHandler(this.EHArea_Clicked);

然后我用下面的方法在后面的代码中声明EHArea_Clicked函数

void EHArea_Clicked(Object sender, EventArgs e)
{
    foreach (RepeaterItem aItem in Repeater1.Items)
    {
        checkbox = (CheckBox)aItem.FindControl("TownCheckbox");
        if (((CheckBox)sender).Checked)
        {
            checkbox.Checked = true;
        }
        else
        {
            checkbox.Checked = false;
        }
    }
}

我的问题是

((CheckBox)sender).Checked

无论我是选中还是取消选中复选框,都始终评估为 true。有人知道为什么会这样吗?

【问题讨论】:

  • 我认为您可能会遇到“复选框”变量的范围问题。您正在重新分配: checkbox = (CheckBox)aItem.FindControl("TownCheckbox");您不应该重新分配复选框。
  • 在哪里动态创建区域组复选框?
  • @zam664 我不这么认为。与复选框变量相关的所有功能都可以正常工作。如果我将 if 条件切换为 !((CheckBox)sender).Checked 它将始终正确执行 else 子句
  • @Win 在转发器的 OnItemDataBound 中并将其设置为转发器中的占位符。
  • @KHeaney 动态创建控件可能会导致问题,但我不能说没有看到你的其余代码。请上传 aspx 和后面的代码。

标签: c# asp.net webforms asp.net-4.5


【解决方案1】:

我相信您的问题是您正在重用 checkbox 变量。你需要一个新变量。尝试这样的事情。您也可以将 if else 减少到一行。

void EHArea_Clicked(Object sender, EventArgs e)
{
    foreach (RepeaterItem aItem in Repeater1.Items)
    {
        CheckBox currentCheckBox = (CheckBox)aItem.FindControl("TownCheckbox");
        currentCheckBox.Checked = ((CheckBox)sender).Checked;
    }
}

【讨论】:

  • 我刚刚尝试过声明一个新变量并将复选框完全重铸为新的。这两种方法都没有解决发件人复选框总是评估为真的问题。
猜你喜欢
  • 1970-01-01
  • 2012-09-18
  • 2013-08-04
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2017-09-18
相关资源
最近更新 更多