始终取消选中Repeater中的ASP.NET复选框控件

时间:2014-01-17 18:38:01

标签: c# asp.net checkbox user-controls repeater

我自己创建的用户控件有问题。如果我点击复选框,Checked属性始终为false,为什么?

<%@ Control Language="C#" AutoEventWireup="true" EnableViewState="true" CodeBehind="MyCtrl.ascx.cs" Inherits="MyCtrl" %>

<asp:CheckBox ID="attrCb" runat="server"
              AutoPostBack="true" 
              oncheckedchanged="cb_CheckedChanged" />

cs文件

public bool IsChecked { get { return ViewState["IsChecked"] != null ? (bool)ViewState["IsChecked"] : false; } set { ViewState["IsChecked"] = value; } }

protected void cb_CheckedChanged(object sender, EventArgs e)
{
    IsChecked = attrCb.Checked;
}

aspx代码段

<asp:Repeater ID="QuestionnaireRepeater" runat="server">
                <ItemTemplate>
                    <tr>                            
                        <td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb1" runat="server" /></td>
                        <td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb2" runat="server" /></td>
                        <td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb3" runat="server" /></td>
                        <td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb4" runat="server" /></td>
                        <td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb5" runat="server" /></td>
                        <td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb6" runat="server" /></td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>

修改

我做了一些更改,它也不起作用(根据Exposing Events from asp.net usercontrols to container web forms page

我仍然看到false

在MyCtrl.ascx里面

<asp:CheckBox ID="attrCb" runat="server"
              AutoPostBack="true"
              oncheckedchanged="Cb_CheckedChanged1" />

在MyCtrl.cs里面我添加了

    public event EventHandler CheckedChange;
    private void OnCheckedChange(object sender, EventArgs ea)
    {
        var e = CheckedChange;

        if (e != null)
            e(this, ea);
    }

    protected void Cb_CheckedChanged1(object sender, EventArgs e)
    {
        OnCheckedChange(sender, e);
    }

在我的aspx页面中:

    protected void On_CheckedChanged(object sender, EventArgs e)
    {
        MyCrtl cbCtrl = ((MyCrtl)sender);

        cbCtrl.IsChecked = cbCtrl.attrCb.Checked; //attrCb is exposed
                                                 //Checked is still false
    }

0 个答案:

没有答案