gpt4 book ai didi

c# - 如何防止 AutoPostBack 重置我的页面?

转载 作者:太空狗 更新时间:2023-10-30 01:32:48 24 4
gpt4 key购买 nike

我正在构建一个页面,其中包含页面上的一些静态组件(下拉列表、按钮、用于容纳它们的表格),但是一个表格单元格充满了可变生成的复选框。按下按钮时,页面代码会计算要放置的复选框并为每个需要的复选框创建一个新的 CheckBox 对象,然后将其添加到页面上的现有 Div 中。

我试图在选中或取消选中其中任何一个时触发一些代码运行,但是 checkBoxName.CheckedChanged += cbCheckedChanged 不工作。我研究并发现了两个建议:启用 View 状态和启用自动回发。

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 当前为空,在用户点击按钮之前不会运行任何内容。

最佳答案

ViewState 默认为服务器端控件启用。您不必修改 ViewState 来解决您的问题。 ViewState 基本上用于在回发发生后恢复控件的状态。例如,将所有条目读取到 ListBox 控件中。这就是为什么大多数控件填充代码都在 Page_Load 方法中的此类构造中。

private void Page_Load()
{
if (!Page.IsPostBack)
{
// populate controls here
}
}

ViewState 是一个容易被误解的概念。有一个great article here详细介绍了它。但正如我所说,对于您的问题 ViewState 不是问题。

解决您的问题:

你的问题是触发按钮正在创建 CheckBox 控件,但是当页面重新加载时,由于这些控件的 CheckedChanged 事件,下一个页面生命周期没有关于在上一个页面生命周期中放置在页面上的 CheckBox 控件的线索。需要为每个页面生命周期生成动态控件!

所以我要做的是创建一个方法:

  • 创建 CheckBox 控件并
  • 为它们设置 AutoPostback = true 并且
  • CheckedChanged 设置事件处理程序

让我们调用此方法 AddDynamicCheckBoxes()。现在,当按钮已被按下时,您需要在 PagePage_Load 事件中以及在按钮的单击事件的事件处理程序中调用此方法。你可以这样做:

private void Page_Load()
{
if (ViewState["button_was_clicked"] != null)
{
AddDynamicCheckBoxes();
}
}

private void Button_OnClick()
{
AddDynamicCheckBoxes();
ViewState["button_was_clicked"] = true;
}

关于c# - 如何防止 AutoPostBack 重置我的页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36068134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com