我有一个基于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
。我可以轻松地做到这一点,但除非绝对必要,否则我不喜欢使用各种“公共旗帜”。我宁愿(如果可能的话)检查该事件的sender
或arguments
以确定该属性是否在从数据库重新加载数据时设置服务器端,或者用户是否实际选择了该属性
我看到了Prevent postback on server-side property change,这不是我问题的直接解决方案,而是一种不适用于我的情况的解决方法。
有没有办法确定这是单独设置服务器端,以便我可以绕过运行此代码?
答案 0 :(得分:1)
使用默认值= false将私有布尔变量dontFire添加到类的顶部。
然后使用以下内容:
dontFire = True;
myCheckbox.Checked = True;
dontFire = False;
然后在myCheckBox.CheckedChanged事件中将其放在顶部:
if (dontFire) return;
问题解决了。
答案 1 :(得分:0)
如果我是正确的,你试图在加载/初始化页面时设置复选框的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,它就可以了。
希望这有帮助。