Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以及何时保存;勾选“;动态复选框的属性_C#_.net_Asp.net - Fatal编程技术网

C# 如何以及何时保存;勾选“;动态复选框的属性

C# 如何以及何时保存;勾选“;动态复选框的属性,c#,.net,asp.net,C#,.net,Asp.net,我在运行时动态添加一些复选框,我需要知道下次重新加载时是否选中它们。 我从存储在ViewState中的列表中加载复选框值。 问题是:何时保存或检查已检查的值? 我尝试了对复选框和要添加复选框的占位符进行事件处理,但没有触发。i、 当我设置一个断点时,它没有停止。有什么建议吗 这是一个示例代码,但我认为没有必要: void LoadKeywords() { bool add = true; foreach (string s in (ViewState["k

我在运行时动态添加一些复选框,我需要知道下次重新加载时是否选中它们。 我从存储在ViewState中的列表中加载复选框值。 问题是:何时保存或检查已检查的值? 我尝试了对复选框和要添加复选框的占位符进行事件处理,但没有触发。i、 当我设置一个断点时,它没有停止。有什么建议吗

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

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);
        }
    }
void LoadKeywords()
{
bool add=true;
foreach(视图状态中的字符串s[“关键字”]作为列表))
如果(s==ddlKeywords.SelectedItem.Text)
{
add=false;
继续;
}
如果(添加)
(查看状态[“关键字”]作为列表)。添加(ddlKeywords.SelectedItem.Text);
foreach(视图状态中的字符串s[“关键字”]作为列表))
{
复选框kw=新复选框();
kw.Disposed+=新事件处理程序(kw\U Disposed);
kw.Text=s;
关键词.控件.添加(kw);
}
}
如何:

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

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


希望这对您有所帮助。

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

通常,您会在Init事件期间(加载视图状态之前)动态添加复选框控件,然后在加载事件期间(加载视图状态之后)读取复选框控件中的值

例如:

protected override void OnInit(事件参数e)
{
//在加载ViewState之前加载控件
碱基.奥尼特(e);
对于(int i=0;i<3;i++)
{
复选框cb=新复选框();
cb=新复选框();
cb.ID=“关键字”+i.ToString();
cb.Text=“关键字”
添加(新复选框());
}
}
//这也可能是一个按钮点击事件?
受保护的覆盖无效加载(事件参数e)
{
基础荷载(e);
如果(第IsPostBack页)
{
//读取复选框值
foreach(MyPlaceHolder.Controls中的复选框控件)
{
bool isChecked=控制。已检查;
字符串关键字=control.Text;
//用这两个值做点什么
}
}
}
希望有帮助

****编辑**** 忘了提到这显然只是演示代码-您需要充实一下

有关ASP.Net中动态控件渲染的详细信息,请查看


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

老实说,这不是一个好的选择-如果您尊重页面生命周期,ASP.Net将处理所有事情,而无需手动干预。我开始理解你的想法,但是填充了什么?Ahmed,这段代码将复选框控件填充到占位符控件中-就像你的示例一样。这在页面(或控件)初始化方法期间发生。我只是创建了3个-但是你可以创建任意多的复选框。您必须在页面初始化中执行此操作,否则Viewstate-将无法在回发上保留复选框。Checked属性。然后,当在页面加载中发回时(在加载Viewstate之后),您可以在用户提交表单后读取复选框的状态(您可能有按钮?)。我已经更新了代码示例,使其更清晰—希望它会更有意义。
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
        }
    }
}