2012-07-21 53 views
2

下面是代码:在ASP:直放站,我用asp:复选框,但OnCheckedChanged不火

<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!"); 
    } 

但是当我点击复选框,什么都没有发生...谢谢你...

+0

为什么你有禁用的视图状态复选框? – yogi 2012-07-21 08:10:28

回答

1

因为你提供了单一的event handlerCheckBoxRepeater

但当然,因为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")); 
    } 
+0

但我应该提供这个事件处理程序?我已经尝试了这两个,但仍然无法工作。 – albatross 2012-07-21 08:27:11

+0

我确信这段代码没有产生任何错误,我已经测试过它并且它很好,你应该从不同的角度看到问题,在你的完整源代码中应该有其他东西引起这个问题,试着使用断点和调试你的代码。使用其他元素,例如向中继器中的按钮提供点击事件,并查看该点击事件是否触发。 – yogi 2012-07-21 08:29:29

+0

单击事件到那里的按钮可以开火...我使用相同的函数'checkChange',但该复选框仍然无法正常工作...你是什么意思,“你测试过它”?页面显示“它运作良好“? – albatross 2012-07-21 08:41:19