C# 动态单选按钮值检索
当我将其添加到C# 动态单选按钮值检索,c#,asp.net,radio-button,dynamic-controls,C#,Asp.net,Radio Button,Dynamic Controls,当我将其添加到页面时,请加载。它工作,它添加了复选框,它是可见的 有点不同的方法: this.Controls.Add(new CheckBox{ Checked = true; }) Globals是一个具有checkbox属性的类,我希望在其上设置复选框,以便在按下按钮后检索数据 var button = new CheckBox{ Checked = true; } globals.button = button; this.Controls.Add(button); 但是,当按下一
页面时,请加载。它工作,它添加了复选框,它是可见的
有点不同的方法:
this.Controls.Add(new CheckBox{ Checked = true; })
Globals是一个具有checkbox属性的类,我希望在其上设置复选框,以便在按下按钮后检索数据
var button = new CheckBox{ Checked = true; }
globals.button = button;
this.Controls.Add(button);
但是,当按下一个按钮时,我的屏幕上的控件消失了,并且我的globals类中的按钮没有随着我对复选框所做的任何更改而更新
如何更改复选框的选中状态并在执行按钮时捕获其当前状态。单击事件?您必须在每次回发时重新创建动态控件,它们不会神奇地重新出现,因为每个请求都是页面
类的新实例
请看我关于这个主题的帖子,它使用了一个用户控件,但想法是一样的
必须在加载页面之前添加控件
我通常在重写的CreateChildControls
中执行此操作,但有些人使用Page\u Init
看
更新
这是一种动态添加复选框的非常简单的方法,在单击按钮时保留状态/值
public static CheckBox button { get; set; }
您必须在每次回发时重新创建动态控件,它们不会神奇地重新出现,因为每个请求都是页面
类的新实例
请看我关于这个主题的帖子,它使用了一个用户控件,但想法是一样的
必须在加载页面之前添加控件
我通常在重写的CreateChildControls
中执行此操作,但有些人使用Page\u Init
看
更新
这是一种动态添加复选框的非常简单的方法,在单击按钮时保留状态/值
public static CheckBox button { get; set; }
如果在页面加载(object sender,EventArgs e)
方法中创建了动态控件,则它们不会返回用户所做的更改
出现问题的原因是ASP.Net视图状态是在调用页面加载(object sender,EventArgs e)
方法之前创建的。ASP.Net视图状态保存页面上的控件及其值。在创建ASP.Net视图状态之前,将调用Page\u Init(对象发送方,事件参数)
方法。通过在页面中创建控件,Init(objectsender,EventArgs e)
方法将返回用户输入的内容,此外,如果页面不是回发,则只需要创建控件
如果由于某种原因无法在Page\u Init(object sender,EventArgs e)
方法中创建控件,您将编辑以更改Page\u Load(object sender,EventArgs e)
如果您需要在Page\u Load(object sender,EventArgs e)
方法中创建控件,此问题应该会有所帮助如果在Page\u Load(object sender,EventArgs e)
方法中创建动态控件,则它们不会返回用户所做的更改
出现问题的原因是ASP.Net视图状态是在调用页面加载(object sender,EventArgs e)
方法之前创建的。ASP.Net视图状态保存页面上的控件及其值。在创建ASP.Net视图状态之前,将调用Page\u Init(对象发送方,事件参数)
方法。通过在页面中创建控件,Init(objectsender,EventArgs e)
方法将返回用户输入的内容,此外,如果页面不是回发,则只需要创建控件
如果由于某种原因无法在Page\u Init(object sender,EventArgs e)
方法中创建控件,您将编辑以更改Page\u Load(object sender,EventArgs e)
如果需要在页面加载(object sender,EventArgs e)
方法中创建控件,此问题应该会有所帮助再次添加控件不是问题。我的问题是,当我在点击按钮时更改它时,获取该值。您说过,但是,当按下按钮时,该控件在我的屏幕上消失了
-这表明您没有在每次回发中重新添加该控件,如果未添加,则无法获取值我想从globals类中设置的复选框中获取值。从何处获取?该按钮仅存在于该请求中,一旦该请求完成,按钮就会消失,您无法存储它并在以后检索它。如果需要存储一个值以供以后使用,可以使用会话
或应用程序
。因此,我无法将按钮存储在其他类中,并在回发后从该类访问它?我很确定我以前用textbox做过这个。。但我失去了那个项目。另外,我不能将控件创建放在OnInit或CreateChildControl中,因为它依赖于下拉框的值。再次添加控件不是问题。我的问题是,当我在点击按钮时更改它时,获取该值。您说过,但是,当按下按钮时,该控件在我的屏幕上消失了
-这表明您没有在每次回发中重新添加该控件,如果未添加,则无法获取值我想从globals类中设置的复选框中获取值。从何处获取?该按钮仅存在于该请求中,一旦该请求完成,按钮就会消失,您无法存储它并在以后检索它。如果需要存储一个值以供以后使用,可以使用会话
或应用程序
。因此,我无法将按钮存储在其他类中,并在回发后从该类访问它?我很确定我以前用textbox做过这个。。但我失去了那个项目。另外,我不能将控件创建放在OnInit或CreateChildControl中,因为它依赖于下拉框的值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Test : Page
{
private CheckBox MyCheckBox { get; set; }
protected override void CreateChildControls()
{
this.MyCheckBox = new CheckBox() { Checked = true };
this.ph.Controls.Add(this.MyCheckBox);
base.CreateChildControls();
}
protected void btn_Click(object sender, EventArgs e)
{
var someValue = this.MyCheckBox.Checked;
this.lbl.Text = someValue ? "Checked" : "Not Checked";
}
}