以下是代码:
1 <ISWebGrid:WebGridColumn Caption="首页显示" InputRequired="true" Name="Title" Width="70px"
2 ColumnType="Template" DataMember="IsShow" EditType="NoEdit">
3 <CellTemplate>
4 <asp:CheckBox runat="server" ID="cbIsShow" Checked='<%# Bind("IsShow") %>' EnableViewState="true"
5 OnCheckedChanged="cbIsShow_CheckedChanged" Enabled="false" />
6 </CellTemplate>
7 </ISWebGrid:WebGridColumn>
1 protected void cbIsShow_CheckedChanged(object sender,EventArgs e)
2 {
3 Response.Write("<script>alert(\"cbIsShow_CheckedChanged\");</script>");
4 }
当点击模版列的CheckBox时,后台的cbIsShow_CheckedChanged方法总是不执行。
google中有许多种答案如:
1.AutoPostBack="True"没写;
2.EnableViewState要设为false;
试过后都不行。
当我把绑定去掉以后,cbIsShow_CheckedChanged方法正常运行。
我给的解释是:
OnCheckedChanged是在CheckBox的Checked属性变化之后才会满足事件触发条件的,模版列中的CheckBox的Checked属性绑定了IsShow字段,在没有改变数据源的情况下,CheckBox的Checked属性值是不会改变的,不满足事件触发条件,所以不运行事件处理函数也是正常的。
也许可行的方法为:
1.为CheckBox添加客户端事件onClicked,在js中调用后台的方法。