【发布时间】:2016-07-04 05:58:11
【问题描述】:
我正在构建一个页面,其中包含页面上的一些静态组件(下拉菜单、按钮、用于保存它们的表格),但一个表格单元格中填充了可变生成的复选框。当按下按钮时,页面代码会计算要放置哪些复选框,并为每个需要的复选框创建一个新的 CheckBox 对象,然后将其添加到页面上的现有 Div。
我正在尝试在选中或取消选中其中任何一个时触发一些代码运行,但 checkBoxName.CheckedChanged += cbCheckedChanged 不起作用。我研究并发现了两个建议:启用视图状态和启用自动回发。
checkBoxName.EnableViewState = true; 似乎没有任何区别,checkBoxName.ViewStateMode = ViewStateMode.Enabled; 或我尝试过的任何变化也没有。 checkBoxName.AutoPostBack = true; 做了一些事情,但它不允许它运行我想要的代码。我认为那是因为下一个问题,它没有达到那个点:
使用AutoPostBack = true,每当我选中或取消选中一个框时,cbCheckedChanged 都不会被执行,整个页面正在重新加载,重置为初始状态,因此从表格中完全删除了复选框。
我该如何解决这些问题,或者至少我可以从哪里开始寻找?
编辑:
这是创建复选框的地方:
CheckBox cb = new CheckBox();
cb.Text = CBName;
cb.EnableViewState = true;
cb.ViewStateMode = ViewStateMode.Enabled;
cb.AutoPostBack = true;
cb.CheckedChanged += CBCheckedChanged;
这就是 CBCheckedChanged 所在的位置:
private void CBCheckedChanged(object sender, EventArgs e)
{
\\Stuff
}
当我使用断点单步执行它时,它永远不会到达 CBCheckedChanged。我已经尝试了在 AutoPostBack、ViewStateMode 和 EnableViewState 行中注释和离开的所有可能组合。
Page_Load 当前为空,在用户点击按钮之前不会运行任何内容。
【问题讨论】:
-
您确定同时使用 checkBoxName.CheckedChanged += cbCheckedChanged 和 AutoPostBack = true 吗?如果您在 page_load 事件中设置断点并在选中复选框后单步执行,它不会进入您的事件处理程序?
-
使用回发时,您需要将 Page_Load 事件处理程序中的代码封装在
If Not IsPostBack Then ...中,以确保此初始化代码仅在页面第一次加载时运行。 -
除非您重新创建了所有控件,否则该事件将不会执行,并且如果您希望部分更新使用 UpdatePanel,则帖子将始终在发送新页面时重建您的页面。
-
你能发布你想要开始工作的标记和代码吗?
-
@Gusman,我不知道从哪里开始,我是否将要放入复选框的 div 放在更新面板中?我只是把其他所有东西合二为一吗?复选框本身?我想要的是页面的内容不会改变,除了一个复选框被选中,而是触发 CBCheckedChanged 的运行