2009-04-25 61 views
2

我這裏有一個相當惱人的問題的UpdatePanel與ASP.NET直放站和複選框Aync回傳問題

我不能讓我的複選框CheckedChange事件,火災,或趕上或什麼,那就是失敗:

ASPX代碼

<asp:UpdatePanel runat="server" ID="udp_Lists" UpdateMode="Always"> 
<ContentTemplate> 
    <asp:Repeater ID="rep_showings" runat="server"> 
     <HeaderTemplate> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <div class="div_assignment"> 
       <div class="div_assignment_text"> 
        <asp:LinkButton runat="server" ID="lnk_show_task" OnClick="lnk_show_task_Click" CommandArgument='<%# Eval("Id") %>' Text='<%# Eval("TaskTitle") %>'></asp:LinkButton> 
       </div> 
       <div class="div_assignment_checkbox"> 
        <asp:CheckBox runat="server" ID="chk_handle" AutoPostBack="true" OnCheckedChanged="chk_handle_Changed" ToolTip='<%# Eval("Id") %>' /> 
       </div> 
      </div> 
     </ItemTemplate> 
     <FooterTemplate> 
     </FooterTemplate> 
    </asp:Repeater> 
</ContentTemplate> 
<Triggers> 
</Triggers> 

永遠達不到背後的功能"chk_handle_Changed"的代碼。 Linkbutten完美地工作。

回答

6

我看了一下你的問題。我用了下面的代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     this.rep_showings.DataSource = new object[] { new { Title = "title", ID = "id" } }; 
     this.rep_showings.DataBind(); 
    } 
} 

protected void chk_handle_Changed(object source, EventArgs e) 
{ 
    Trace.Write("here"); 
} 

protected void lnk_show_task_Click(object source, EventArgs e) 
{ 
    Trace.Write("here 2"); 
} 

protected void rep_showings_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ } 

上面的代碼有效。我認爲你可能會在每次回發中重新綁定你的轉發器 - 我通過刪除Page_Load()中的「if(!IsPostBack)」聲明來測試這一點,並且我能夠重現你描述的有問題的行爲。

如果可能的話,應避免在每次回發時重新綁定控件。一旦控件被填充,它的數據由ViewState處理,所以除非數據發生變化,否則您應該不會一直重新綁定數據。

+0

是的,你應該只在page_load的時候綁定數據!isPostback – edosoft 2009-04-25 15:41:02