2

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

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

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

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

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

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

4

2 回答 2

1

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

然后使用以下内容:

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

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

if (dontFire) return;

问题解决了。

于 2015-03-12T00:24:41.487 回答
0

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

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

  1. 处理您提到的情况的另一种方法可能是仅当您未将复选框的选中属性设置为 true 时,才在页面加载时动态绑定控件(您的复选框)事件。
  2. 使用简单的页面属性作为标志来表示选中的属性是否已设置为服务器端,并在复选框的更改事件处理程序中使用它。您不需要使用会话,因为您可能不需要在回发中保留此值。
  3. 如果可能,请在复选框的更改事件处理程序中将复选框的选中属性设置为 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 ,它就可以解决问题。

希望这可以帮助。

于 2013-09-30T20:13:40.257 回答