Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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/36.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_Radio Button_Dynamic Controls - Fatal编程技术网

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";
    }

}