ASP.NET CheckBox does not fire CheckedChanged event when unchecking

前端 未结 9 717
隐瞒了意图╮
隐瞒了意图╮ 2020-12-08 10:04

I have a CheckBox on an ASP.NET Content Form like so:



        
9条回答
  •  死守一世寂寞
    2020-12-08 10:57

    Implementing a custom CheckBox that stores the Checked property in ControlState rather than ViewState will probably solve that problem, even if the check box has AutoPostBack=false

    Unlike ViewState, ControlState cannot be disabled and can be used to store data that is essential to the control's behavior.

    I don't have a visual studio environnement right now to test, but that should looks like this:

    public class MyCheckBox : CheckBox
    {
        private bool _checked;
    
        public override bool Checked { get { return _checked; } set { _checked = value; } }
    
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            //You must tell the page that you use ControlState.
            Page.RegisterRequiresControlState(this);
        }
    
        protected override object SaveControlState()
        {
            //You save the base's control state, and add your property.
            object obj = base.SaveControlState();
    
            return new Pair (obj, _checked);
        }
    
        protected override void LoadControlState(object state)
        {
            if (state != null)
            {
                //Take the property back.
                Pair p = state as Pair;
                if (p != null)
                {
                    base.LoadControlState(p.First);
                    _checked = (bool)p.Second;
                }
                else
                {
                    base.LoadControlState(state);
                }
            }
        }
    }
    

    more info here.

提交回复
热议问题