2

コードは次のとおりです。

<asp:Repeater runat="server" ID="repeater1" OnItemCommand="checkChange">
    <ItemTemplate>
            <asp:Table runat="server" Width="80%">
            <asp:TableRow runat="server" HorizontalAlign="Center" Width="80%">
                <asp:TableCell Width="80%" HorizontalAlign="Left">
                    <asp:Button ID="Button1" runat="server" Text="删除" Visible="<%#administrator %>" />
                    <asp:CheckBox runat="server" ID="checkBox" Text='<%#DataBinder.Eval(Container.DataItem,"IID")%>' AutoPostBack="true" OnCheckedChanged="checkChange" EnableViewState="false"/>
                    <asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"invText") %>'></asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            </asp:Table>
    </ItemTemplate>
    </asp:Repeater>

関数は次のとおりです。

 protected void checkChange(object sender, EventArgs e)
    {
        Response.Write("it works well!");
    }

しかし、チェックボックスをクリックしても何も起こりません...ありがとう...

4

1 に答える 1

1

と のevent handler両方にsingle を指定したためです。CheckBoxRepeater

しかしもちろん、OnItemCommandOnCheckedChangedイベントの両方が同じデリゲート シグネチャを持っているvoid target(object sender, EventArgs e)ため、エラーが発生することはありません。

コードは次のように正常に動作します:

<asp:Repeater runat="server" ID="repeater1">
            <ItemTemplate>
                <asp:Table ID="Table1" runat="server" Width="80%">
                    <asp:TableRow ID="TableRow1" runat="server" HorizontalAlign="Center" Width="80%">
                        <asp:TableCell Width="80%" HorizontalAlign="Left">
                            <asp:Button ID="Button1" runat="server" Text="Button" />
                            <asp:CheckBox runat="server" ID="checkBox" Text="Click me if u dare." AutoPostBack="true"
                                OnCheckedChanged="checkChange" EnableViewState="false" />
                            <asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                        </asp:TableCell>
                    </asp:TableRow>
                </asp:Table>
            </ItemTemplate>
        </asp:Repeater>

バックエンド

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Name");
            for (int i = 0; i < 5; i++)
                dt.Rows.Add(new object[] { "Name no.: " + i.ToString() });
            repeater1.DataSource = dt;
            repeater1.DataBind();
        }
    }

    protected void checkChange(object sender, EventArgs e)
    {
        Response.Write("Clicked called at :" + DateTime.Now.ToString("dd-MM-yy hh:mm:ss"));
    }
于 2012-07-21T08:15:37.000 に答える