The*_*ter 2 asp.net updatepanel asynchronous
我这里有一个相当讨厌的问题
我无法触发我的CheckBox 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>
Run Code Online (Sandbox Code Playgroud)
"chk_handle_Changed"永远不会达到代码隐藏功能.Linkbutten完美无缺.
我看了看你的问题.我使用了以下代码:
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)
{ }
Run Code Online (Sandbox Code Playgroud)
上面的代码有效.我想你可能会在每次回发时重新绑定你的转发器 - 我通过删除Page_Load()中的"if(!IsPostBack)"语句对此进行了测试,并且我能够重现你描述的有问题的行为.
如果可能,应该避免重新绑定每个回发的控件.一旦控件被填充,它的数据由ViewState处理,所以除非数据正在改变,否则你可能不应该一直重新绑定它.