c# - 如果在服务器端设置了控件的属性,则阻止或绕过事件

标签 c# asp.net events

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

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

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

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

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

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

最佳答案

将私有(private) bool 变量 dontFire 添加到类的顶部,默认值为 false。

然后使用以下内容:

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

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

if (dontFire) return;

问题已解决。

关于c# - 如果在服务器端设置了控件的属性,则阻止或绕过事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19100233/

相关文章:

c# - Ef Code First 外键失败

c# - 链接到图表或调度控件的示例

c# - 将具有多个 froms 的 linq 查询表达式转换为扩展方法语法

c# - 获得文章唯一点击率的可靠方法

C# 表单激活和停用事件

java - 测试多个EditText是否为空

c# - 通过 Ajax 将 Var 和列表传递给 Controller

asp.net - jQuery 的原生 ajax 函数 vs ajaxDotNet 插件

asp.net - 如何增加 ASP.NET HTTP 进程的超时?

javascript - Jquery Accordion 更改事件不会触发