C# 回发后Asp.net复选框问题

C# 回发后Asp.net复选框问题,c#,asp.net,checkbox,postback,C#,Asp.net,Checkbox,Postback,这是一个带有C的asp.net项目# 我有一个GridView,它有一个复选框列。用户通过单击相应的复选框选择一行。然后他们可以通过做各种事情(主要是点击按钮)来处理这一行。我遇到的问题是,当用户单击按钮时,gridview会刷新。大多数情况下,这包括删除一行。当用户选择另一个复选框(gridview中的另一行)进行操作时,您可以短暂地看到它选中该复选框,然后立即取消选中该复选框,或者选中他们要选择的复选框下方的复选框。发生这种情况时,onCheckedChanged不会触发。但是,当我刷新页面

这是一个带有C的asp.net项目#

我有一个
GridView
,它有一个复选框列。用户通过单击相应的复选框选择一行。然后他们可以通过做各种事情(主要是点击按钮)来处理这一行。我遇到的问题是,当用户单击按钮时,gridview会刷新。大多数情况下,这包括删除一行。当用户选择另一个复选框(gridview中的另一行)进行操作时,您可以短暂地看到它选中该复选框,然后立即取消选中该复选框,或者选中他们要选择的复选框下方的复选框。发生这种情况时,
onCheckedChanged
不会触发。但是,当我刷新页面时,选择和取消选择复选框的效果与预期一样,没有任何问题

正如一些旁注:

  • 我正在根据选中的复选框使用Javascript突出显示行。(如果需要,我可以提供此代码)
  • 我确保在checkchanged事件下使用以下代码一次只选中一个复选框:

    CheckBox activeCheckBox = sender as CheckBox;
    
    foreach (GridViewRow rw in GridView1.Rows)
    {
        CheckBox chkBx = (CheckBox)rw.FindControl("RowLevelCheckBox1");
        if (chkBx != activeCheckBox)
        {
            chkBx.Checked = false;
        }
        else if (chkBx == activeCheckBox && (chkBx.Checked != false && activeCheckBox.Checked != false))
        {
            chkBx.Checked = true;
        }
    }
    
  • 我正在if(!IsPostBack)内的页面加载中绑定codebehind中的gridview

  • 在您询问之前,我已经在复选框上设置了
    autopostback=“true”
  • 单击按钮时,我正在设置
    复选框。checked=false
    ,但当我调试并选中页面加载上gridview中的所有复选框时,在执行所有代码后,仍显示选中了一个复选框


    为什么会发生这种行为?

    您发布的代码是在回发之前还是在回发之后被命中的。。?您是否在
    Page\u Load
    部分以及发布代码的部分中放置了断点?我同意MethodMan的观点,您需要验证页面事件的触发顺序(Init、Load、Render)还可以尝试禁用复选框控件上的viewstate。@MethodMan该代码位于CheckedChangedEvent中,它仅在复选框被选中或未选中时才会被命中……据推测。在我提到的情况下,它不会被击中。我几乎在所有地方都设置了断点,但似乎找不到问题所在。@MethodMan啊,我明白你的意思了。这段代码似乎是在回发之后被点击的。如果我在页面加载和该事件上设置断点。页面加载发生在事件发生之前。这是有意的吗?似乎删除行复选框的viewstate(当时该复选框会被选中)正被带到它上面的行(如果删除行下面没有任何行)或它正被带到下面的行(如果删除行下面有行)。如何将该复选框的viewstate完全清除,使其不会移动到
    GridView
    中的任何其他复选框?在重新绑定
    网格视图之前设置
    .Checked
    字段似乎没有任何作用。有人知道吗?你发布的代码是在回发之前还是之后被点击的。。?您是否在
    Page\u Load
    部分以及发布代码的部分中放置了断点?我同意MethodMan的观点,您需要验证页面事件的触发顺序(Init、Load、Render)还可以尝试禁用复选框控件上的viewstate。@MethodMan该代码位于CheckedChangedEvent中,它仅在复选框被选中或未选中时才会被命中……据推测。在我提到的情况下,它不会被击中。我几乎在所有地方都设置了断点,但似乎找不到问题所在。@MethodMan啊,我明白你的意思了。这段代码似乎是在回发之后被点击的。如果我在页面加载和该事件上设置断点。页面加载发生在事件发生之前。这是有意的吗?似乎删除行复选框的viewstate(当时该复选框会被选中)正被带到它上面的行(如果删除行下面没有任何行)或它正被带到下面的行(如果删除行下面有行)。如何将该复选框的viewstate完全清除,使其不会移动到
    GridView
    中的任何其他复选框?在重新绑定
    网格视图之前设置
    .Checked
    字段似乎没有任何作用。有人知道吗?