Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果控制';的属性设置为服务器端_C#_Asp.net_Events - Fatal编程技术网

C# 如果控制';的属性设置为服务器端

C# 如果控制';的属性设置为服务器端,c#,asp.net,events,C#,Asp.net,Events,我有一个ASP.NET复选框,根据特定的逻辑,我需要将其checked值设置为true服务器端。这很简单,但它也会触发wired-upMyCheckBox\u CheckedChanged(objectsender,EventArgs e)事件 该事件的代码是100%确定的,只要用户在客户端选中复选框时调用它。但是,当我试图将该复选框设置为Checked=true服务器端我不希望事件中的代码运行 我希望采用的最干净的方法是检查事件上的sender对象,看看客户端是否真的调用了此事件(如:)。然而

我有一个ASP.NET复选框,根据特定的逻辑,我需要将其
checked
值设置为
true
服务器端。这很简单,但它也会触发wired-up
MyCheckBox\u CheckedChanged(objectsender,EventArgs e)
事件

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

我希望采用的最干净的方法是检查事件上的
sender
对象,看看客户端是否真的调用了此事件(如:)。然而,这并没有产生任何区别信息。它看起来仍然像是被选中的复选框

我的第二个想法是设置一些会话值,如果没有被用户调用,则检查它是否返回。我可以很容易地做到这一点,但我不喜欢使用“公共标志”,除非绝对必要。我宁愿(如果可能的话)检查该事件上的
发送方
参数
,以确定该属性是在从数据库重新加载数据时设置在服务器端的,还是用户实际选择了它

我看到了这一点,它不是我问题的直接解决方案,而是一种不适用于我的情况的变通方法


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

如果我没有错,您正在尝试在加载/初始化页面时将复选框的checked属性设置为true

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

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

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


    希望这有帮助。

    在类的顶部添加一个私有布尔变量dontFire,默认值为false

    然后使用以下命令:

    dontFire = True;
    myCheckbox.Checked = True;
    dontFire = False;
    
    然后在myCheckBox.CheckedChanged事件中,将其置于顶部:

    if (dontFire) return;
    

    问题已解决。

    您能提供一个工作示例吗?我试图重现do所描述的内容,但似乎无法触发事件服务器端。我同意会话值有点混乱,但作为折衷方案,可能是页面类中的私有值?它可能仍然感觉像一个凌乱的标志,但至少它被完全封装在对象中?复选框是如何声明的,事件是如何附加的?我不同意尤里和弗雷多的看法。我从未让
    CheckedChanged
    事件触发以编程方式更改
    .Checked
    值。很高兴看到你的代码。是的,我想这可以工作。然而,我的OP指出,“……除非绝对必要,否则我不喜欢使用‘公共标志’类型。我宁愿(如果可能的话)检查该事件的发送方或参数,以确定该属性是否在从数据库重新加载数据时设置在服务器端,或者用户是否实际选择了它。”从技术上讲,我知道你提出的是一个
    私有
    标志,但它与使用标志返回
    的精神是一样的。
    我已经得出了这个结论,但实际上是在寻找一个更具动态性的东西,而不是显式设置标志。