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

时间:2013-09-30 17:28:46

标签: c# asp.net events

我有一个基于certian逻辑的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以确定该属性是否在从数据库重新加载数据时设置服务器端,或者用户是否实际选择了该属性

我看到了Prevent postback on server-side property change,这不是我问题的直接解决方案,而是一种不适用于我的情况的解决方法。

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

2 个答案:

答案 0 :(得分:1)

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

然后使用以下内容:

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

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

if (dontFire) return;

问题解决了。

答案 1 :(得分:0)

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

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

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

              public bool Check_CheckBox
              {
                set
                {
                    checkbox1.Checked = value;
                    if (value)
                    {
                        checkbox1.CheckedChanged -= new EventHandler(this.Check_Clicked);
                    }
                }
                get
                {
                    return checkbox1.Checked;
                }
            }
    
  5. 根据你的逻辑将Check_CheckBox属性设置为true,它就可以了。

    希望这有帮助。