Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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#_Asp.net_Master Pages - Fatal编程技术网

C# 获取运行时添加控件的值

C# 获取运行时添加控件的值,c#,asp.net,master-pages,C#,Asp.net,Master Pages,HTML 通过按钮add在运行时添加了一个新的复选框 然后我想通过按钮获取复选框chbshow 但是((复选框)content.FindControl(“chb”)。选中则返回Null 我希望动态添加复选框,然后检查其中哪个复选框为真。您的事件不会发生在页面的同一回发中-当您单击add时,它会添加复选框,但随后页面执行完成,页面被发送到客户端,并完成对单击事件的处理 然后单击show按钮时,这是另一个回发,您的复选框尚未创建,因此不存在 要处理此问题,您有几个选项: 一,。 将复选框添加到设计器

HTML

通过按钮
add
在运行时添加了一个新的
复选框

然后我想通过按钮获取复选框
chb
show

但是
((复选框)content.FindControl(“chb”)。选中则返回Null


我希望动态添加复选框,然后检查其中哪个复选框为真。

您的事件不会发生在页面的同一回发中-当您单击
add
时,它会添加复选框,但随后页面执行完成,页面被发送到客户端,并完成对
单击
事件的处理

然后单击
show
按钮时,这是另一个回发,您的复选框尚未创建,因此不存在

要处理此问题,您有几个选项:

一,。 将复选框添加到设计器中的页面,并将其
Visible
属性初始设置为
false
。您可以保留
add
按钮,但它实际上不会向页面添加复选框,它只会通过将
visible
设置为
true
使其可见

二,。 如果确实要动态添加复选框,则需要在每次执行页面时在其中一个页面事件处理程序(例如
Load
)中添加复选框。方法是在单击
add
时将值保存在viewstate或隐藏字段中,并根据该值在后续回发中创建复选框

protected void show_Click(object sender, EventArgs e)
{
    Response.Write(((CheckBox) content.FindControl("chb")).Checked);
}
protected void add_Click(object sender, EventArgs e)
{
    CheckBox chb = new CheckBox();
    chb.ID = "chb";
    chb.Text = "chb";
    content.Controls.Add(chb);

}

这是因为动态添加的控件在回发后不会保留。您可以通过向页面添加另一个按钮(无需单击事件处理程序)轻松演示这一点。运行应用程序并单击“添加”按钮创建复选框,然后单击新添加的按钮,该复选框将在回发后消失。

好吧,我不明白您想要实现什么,但是

protected void Page_Load (object sender, EventArgs e)
{
    if ( IsPostBack )
    {
        if ( Session["chb"] != null )
            CreateChb ();
    }
}
protected void show_Click(object sender, EventArgs e)
{
    Response.Write(((CheckBox) content.FindControl("chb")).Text);
}
protected void add_Click(object sender, EventArgs e)
{
    Session["chk"] = true;
    CreateChb ();
}
private void CreateChb ()
{
    CheckBox chb = new CheckBox();
    chb.ID = "chb";
    chb.Text = "chb";
    content.Controls.Add(chb);
}

我希望动态添加复选框,然后检查其中哪个复选框是真的如果要保持复选框的状态,最好在设计器中创建复选框控件,并在需要时显示/隐藏它。您可以动态地执行此操作,但您必须自己基本上保留动态控件的状态,这将是一项非常繁重的工作。如果您计划动态添加多个控件,则必须为所有控件执行该操作。为什么要动态添加控件?如果你真的打算用这种方式在页面上添加100个复选框,那你就要做一些严肃的工作了-除非你真的真的需要这样做,否则这是错误的方法。你的示例很有效,但我认为在会话中保留控件不是一个好主意。(虽然我个人认为动态添加控件不是一个好主意,但在少数情况下除外。:)@xxbbcc你是对的,但正如我在回答中所说的,我不理解其目的。@user1263390如果你正在为2000个用户构建一个应用程序,我可以简单地说你在处理这种情况时的方式是错误的。但看起来你的代码不像一个真正的应用程序,而不仅仅是一个试用版。我不知道2000用户,但我想知道如何才能做到这一点。通过一个好的方式
protected void Page_Load (object sender, EventArgs e)
{
    if ( IsPostBack )
    {
        if ( Session["chb"] != null )
            CreateChb ();
    }
}
protected void show_Click(object sender, EventArgs e)
{
    Response.Write(((CheckBox) content.FindControl("chb")).Text);
}
protected void add_Click(object sender, EventArgs e)
{
    Session["chk"] = true;
    CreateChb ();
}
private void CreateChb ()
{
    CheckBox chb = new CheckBox();
    chb.ID = "chb";
    chb.Text = "chb";
    content.Controls.Add(chb);
}
  protected void show_Click(object sender, EventArgs e)
    {               
        Response.Write((Session["chb"] as CheckBox).Text);
    }
    protected void add_Click(object sender, EventArgs e)
    {
        CheckBox chb = new CheckBox();
        chb.ID = "chb";
        chb.Text = "chb";
        content.Controls.Add(chb);
        Session["chb"] = chb;

    }