如何以及何时保存动态复选框的“已检查”属性的值

时间:2009-07-29 10:17:10

标签: c# .net asp.net

我在运行时动态添加了一些复选框,我需要知道下次重新加载时是否检查了它们。 我从存储在ViewState中的列表中加载复选框值。 问题是:我什么时候保存或检查Checked的价值? 我尝试了复选框处理事件和我添加复选框的占位符,但它没有被触发。也就是说,当我提出一个断点时,它并没有停止。那么有什么建议吗?

这是一个示例代码,但我认为没有必要:

void LoadKeywords()
    {
        bool add = true;
        foreach (string s in (ViewState["keywords"] as List<string>))
            if (s == ddlKeywords.SelectedItem.Text)
            {
                add = false;
                continue;
            }

        if (add)
            (ViewState["keywords"] as List<string>).Add(ddlKeywords.SelectedItem.Text);



        foreach (string s in (ViewState["keywords"] as List<string>))
        {
            CheckBox kw = new CheckBox();
            kw.Disposed += new EventHandler(kw_Disposed);
            kw.Text = s;
            PlaceHolderKeywords.Controls.Add(kw);
        }
    }

2 个答案:

答案 0 :(得分:2)

如果要在运行时动态添加控件,则必须确保在加载ViewState之前将这些控件填充到页面的Control集合中。这样每个复选框的状态都可以从Viewstate重新水合。例如,Page Load事件为时已晚。

通常,您将在Init事件期间(加载视图状态之前)动态添加CheckBox控件,然后在Load事件期间(加载视图状态之后)读取Checkbox控件中的值。

例如:

protected override void OnInit(EventArgs e)
{
    //load the controls before ViewState is loaded
    base.OnInit(e);
    for (int i = 0; i < 3; i++)
    {
        CheckBox cb = new CheckBox();
        cb = new CheckBox();
        cb.ID = "KeyWord" + i.ToString();
        cb.Text = "Key Word"
        MyPlaceHolder.Controls.Add(new CheckBox());
    }
}

//this could also be a button click event perhaps?
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    if (Page.IsPostBack)
    {
        //read the checkbox values
        foreach(CheckBox control in MyPlaceHolder.Controls)
        {
            bool isChecked = control.Checked;
            string keyword = control.Text;

            //do something with these two values
        }
    }
}

希望有所帮助

**** **** EDIT 忘记提到这显然只是演示代码 - 你需要充实它。

有关ASP.Net中动态控制渲染的更多信息,请查看this article on 4Guys

有关ASP.Net中页面生命周期的更多信息,请查看MSDN

答案 1 :(得分:0)

如何:

尝试添加一个处理checked()的javascript代码, 你可以使用document.findElementById(ID)获取复选框,然后将复选框的值存储到具有runat =“server”属性的hiddenfield中。

何时: 在pageload上,检查page是否为postback(),并检查hiddenfield(s)值(S)。或者添加一个提交按钮(并将其事件放在后面的代码中,runat =“server”属性)。

希望这有助于你。