ASP.NET C#CheckBox在取消选中时不会触发CheckedChanged事件

时间:2015-03-16 12:28:28

标签: c# asp.net checkbox repeater

我有转发器

<asp:Repeater ID="rptResult" runat="server" >
        <ItemTemplate>
            <tr>
                <td>
                  <asp:CheckBox ID="chkShipStatus" runat="server"  EnableViewState="true" ViewStateMode = "Enabled" AutoPostBack="True"  CommandName='<%# DataBinder.Eval(Container.DataItem, "CT")%>'    OnCheckedChanged="chkShipStatus_CheckedChanged"  Checked='<%# Convert.ToBoolean(Eval("SHIPPED")) ? true : false %>'  />

                </td>
            </tr>
        </ItemTemplate>
</asp:Repeater>

并从page_load调用数据

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            DataTable dt = ap.GetDataTable(sql);
            rptResult.DataSource = dt;
            rptResult.DataBind();
         }
       //go there and finish when unchecd

    }

这里是我的CheckedChanged事件,只有当我在取消选中时没有激活它才会调用它转到page_load(不是incycle!postback)

     protected void chkShipStatus_CheckedChanged(object sender, EventArgs e)
    {
        var cb = (CheckBox)sender;
       //go there when i checked
         if (cb.Checked == true)
        {
            //go there when i checked

        }
        else
        {
           //never go in here when i uncheck
        }
    }

3 个答案:

答案 0 :(得分:0)

CheckBox没有CommandName属性,因此将其删除

<asp:CheckBox ID="chkShipStatus" runat="server"  EnableViewState="true" ViewStateMode = "Enabled" 
             AutoPostBack="True"        
             OnCheckedChanged="chkShipStatus_CheckedChanged"  
             Checked='<%# Convert.ToBoolean(Eval("SHIPPED")) ? true : false %>'  
/>

如果您想知道复选框在哪个项目中,您可以使用NamingContainer。然后使用repeaterItem.FindControl获取RepeaterItem中的另一个控件。因此,您可以使用HiddenField来存储记录的ID。

protected void chkShipStatus_CheckedChanged(object sender, EventArgs e)
{
    var cb = (CheckBox)sender;
    RepeaterItem item = (RepeaterItem) cb.NamingContainer
    HiddenField hiddenID = (HiddenField) item.FindControl("HiddenID");
    string id = hiddenID.Value;
    // ...
}

答案 1 :(得分:0)

你说:

  

只有在我取消选中时才打开它才会调用它转到page_load(不是incycle!postback)

那么加载中的代码是什么? 它可能有一些代码阻止取消选中过程

答案 2 :(得分:0)

如果您有 SHIPPED 列值,例如1 OR 0,那么我建议您更新复选框控件的以下属性。我试过了,并且 chkShipStatus_CheckedChanged 事件要求我。

Checked='<%# Convert.ToString(Eval("SHIPPED")) == "1" ? true : false %>'