动态单选按钮值检索
本文关键字:检索 单选按钮 动态 | 更新日期: 2023-09-27 18:17:04
this.Controls.Add(new CheckBox{ Checked = true; })
当我在page_load
。它的工作,它添加了复选框,它是可见的。
一个不同的方法:
var button = new CheckBox{ Checked = true; }
globals.button = button;
this.Controls.Add(button);
Globals是一个具有checkbox属性的类,我想设置复选框,希望在按下按钮后检索它的数据。
public static CheckBox button { get; set; }
但是,当按下按钮时,控件已经从屏幕上消失,并且globals类中的按钮没有随着我对复选框所做的任何更改而更新。
我如何改变复选框的选中状态,并在执行按钮时捕获它的当前状态?单击事件吗?
您必须在每次回发时重新创建动态控件,它们不会神奇地重新出现,因为每个请求都是Page
类的新实例。
看我之前关于这个主题的帖子,它是使用用户控件,但思想是一样的。
和
必须在Page_Load
之前添加控件我通常在覆盖的CreateChildControls
中做,但有些人使用Page_Init
。
查看本文
更新
这是一个动态添加复选框的非常简单的方法,它在按钮被点击时保留状态/值。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:PlaceHolder runat="server" ID="ph"></asp:PlaceHolder>
<asp:Button OnClick="btn_Click" runat="server" ID="btn" Text="Click Me" />
<asp:Label runat="server" ID="lbl"></asp:Label>
</form>
</body>
</html>
后面的代码
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";
}
}
如果在Page_Load(object sender, EventArgs e)
方法中创建了动态控件,它们将不会返回用户所做的更改。
Page_Load(object sender, EventArgs e)
方法被调用之前创建。ASP。网络视图状态保存了页面上的控件及其值。在ASP. js之前调用Page_Init(object sender, EventArgs e)
方法。Net视图状态被创建。通过在Page_Init(object sender, EventArgs e)
方法中创建控件将返回用户输入的内容,此外,只有在页面不是回发时才需要创建控件。
如果由于某种原因您不能在Page_Init(object sender, EventArgs e)
方法中创建控件,您将编辑以更改ASP。Net视图状态Page_Load(object sender, EventArgs e)
。
如果您需要在Page_Load(object sender, EventArgs e)
方法中创建控件,这个问题应该有助于如何在Postback上持久化变量