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