如果控件的属性设置为服务器端,则阻止或绕过事件

本文关键字:事件 控件 属性 设置 服务器端 如果 | 更新日期: 2023-09-27 18:33:24

我有一个 ASP.NET 复选框,根据某些逻辑,我需要将其checked值设置为服务器端true。这很容易,但它也会触发连线MyCheckBox_CheckedChanged(object sender, EventArgs e)事件。

该事件的代码是 100% 确定的,只要在用户从客户端选中复选框时调用它。但是,当我只是尝试将该复选框设置为服务器端Checked = true;时,我不希望事件中的代码运行。

我想解决这个问题的最干净方法是检查事件上的sender对象,看看这个事件是否真的被客户端调用(如:http://msdn.microsoft.com/en-us/library/aa457091.aspx(。然而,这并没有产生任何区别信息。它看起来仍然像被选中的复选框调用它。

我的第二个想法是设置一些会话值并检查它以基本上return(如果不是被用户调用(。我可以很容易地做到这一点,但我不喜欢使用各种"公共标志",除非绝对必要。我宁愿(如果可能的话(检查该事件的senderarguments,以确定该属性是否在从数据库重新加载数据时设置了服务器端,或者用户是否实际选择了它。

看到了这个 防止服务器端属性更改的回发,这不是我问题的直接解决方案,而是不适用于我的情况的解决方法。

有没有办法确定这是仅设置在服务器端设置的,以便我可以绕过运行此代码?

如果控件的属性设置为服务器端,则阻止或绕过事件

将私有布尔变量 dontFire 添加到类的顶部,默认值 = false。

然后使用以下命令:

dontFire = True;
myCheckbox.Checked = True;
dontFire = False;

然后在myCheckBox.CheckedChanged事件中,将其放在顶部:

if (dontFire) return;

问题解决了。

如果我

是正确的,您正在尝试在加载/初始化页面时设置复选框的复选框 true 的选中属性。

以下是您可以遵循的几种方法:

  1. 处理您提到的情况的另一种方法是,仅当您未将复选框的 checked 属性设置为 true 时,才在页面加载时动态绑定控件(复选框(事件。
  2. 使用简单的页面属性作为标志来表示是否已设置选中的属性服务器端,并在复选框的更改事件处理程序中使用它。不需要使用会话,因为可能不需要在回发之间保留此值。
  3. 如果可能,请在复选框的更改事件处理程序中放置用于将复选框的 checked 属性设置为 true 的逻辑,并根据是否设置属性,可以允许/禁止处理程序代码。
  4. 这将是我推荐的解决方案:

              public bool Check_CheckBox
              {
                set
                {
                    checkbox1.Checked = value;
                    if (value)
                    {
                        checkbox1.CheckedChanged -= new EventHandler(this.Check_Clicked);
                    }
                }
                get
                {
                    return checkbox1.Checked;
                }
            }
    
根据您的

逻辑将 Check_CheckBox 属性设置为 true,它将完成。

希望这有帮助。