在onCheckChanged事件背后的代码中创建的复选框未触发

时间:2018-11-27 22:12:31

标签: c# asp.net dynamic webforms

我已经通过codebehind在gridview中创建了一个复选框。这是在代码后面完成的,因为要呈现的控件的类型取决于数据库中的“类型”字段。 (System.Boolean)

我已经创建了复选框,并为OnCheckChanged添加了事件处理程序,但是启用回发后它也不会触发。我知道我应该将值保存到viewstate,但是我似乎无法从控件中捕获任何事件来保存新值!

        if (PreferenceType.ToLower() == "system.boolean")
        {
            var cb = new CheckBox();

            cb.ID = "chkPreferenceValue";
            div.Controls.Add(cb);
            if (mode == RenderMode.Insert)
                hfPrefValue.Value = cb.Checked.ToString();
            else
            {
                var chk = false;

                bool.TryParse(hfPrefValue.Value, out chk);

                cb.Checked = chk;

            }
            cb.AutoPostBack = true;
            cb.Visible = true;
            cb.CheckedChanged += new EventHandler(InsertPropValueFromInsertCB_CheckedChanged);

        }

这是事件,我试图将其保存到隐藏字段和viewstate中,但由于事件从未发生,因此均无效。

    private void InsertPropValueFromInsertCB_CheckedChanged(object sender, EventArgs e)
    {
        var cb = sender as CheckBox;
        var hf = cb.FindSiblingRecursive<HiddenField>("hfNewPreferenceValue");
        hf.Value = cb.Checked.ToString();
        ViewState[$"PropRowValue{((GridViewRow)hf.Parent.Parent).RowIndex}"] = cb.Checked;
    }

0 个答案:

没有答案