C# 如何以及何时保存;勾选“;动态复选框的属性
我在运行时动态添加一些复选框,我需要知道下次重新加载时是否选中它们。 我从存储在ViewState中的列表中加载复选框值。 问题是:何时保存或检查已检查的值? 我尝试了对复选框和要添加复选框的占位符进行事件处理,但没有触发。i、 当我设置一个断点时,它没有停止。有什么建议吗 这是一个示例代码,但我认为没有必要:C# 如何以及何时保存;勾选“;动态复选框的属性,c#,.net,asp.net,C#,.net,Asp.net,我在运行时动态添加一些复选框,我需要知道下次重新加载时是否选中它们。 我从存储在ViewState中的列表中加载复选框值。 问题是:何时保存或检查已检查的值? 我尝试了对复选框和要添加复选框的占位符进行事件处理,但没有触发。i、 当我设置一个断点时,它没有停止。有什么建议吗 这是一个示例代码,但我认为没有必要: void LoadKeywords() { bool add = true; foreach (string s in (ViewState["k
void LoadKeywords()
{
bool add = true;
foreach (string s in (ViewState["keywords"] as List<string>))
if (s == ddlKeywords.SelectedItem.Text)
{
add = false;
continue;
}
if (add)
(ViewState["keywords"] as List<string>).Add(ddlKeywords.SelectedItem.Text);
foreach (string s in (ViewState["keywords"] as List<string>))
{
CheckBox kw = new CheckBox();
kw.Disposed += new EventHandler(kw_Disposed);
kw.Text = s;
PlaceHolderKeywords.Controls.Add(kw);
}
}
void LoadKeywords()
{
bool add=true;
foreach(视图状态中的字符串s[“关键字”]作为列表))
如果(s==ddlKeywords.SelectedItem.Text)
{
add=false;
继续;
}
如果(添加)
(查看状态[“关键字”]作为列表)。添加(ddlKeywords.SelectedItem.Text);
foreach(视图状态中的字符串s[“关键字”]作为列表))
{
复选框kw=新复选框();
kw.Disposed+=新事件处理程序(kw\U Disposed);
kw.Text=s;
关键词.控件.添加(kw);
}
}
如何:
尝试添加处理checked()的javascript代码,
您可以使用document.findElementById(ID)获取复选框,然后将复选框的值存储到具有runat=“server”属性的hiddenfield中
何时:
在pageload上,检查页面是否为postback(),并检查hiddenfield值。或者添加一个提交按钮(并将其事件放在代码隐藏中,runat=“server”属性)
希望这对您有所帮助。如果您在运行时动态添加控件,则必须确保在加载ViewState之前将这些控件填充到页面的控件集合中。这样,每个复选框的状态都可以从Viewstate重新水化。例如,页面加载事件太晚 通常,您会在Init事件期间(加载视图状态之前)动态添加复选框控件,然后在加载事件期间(加载视图状态之后)读取复选框控件中的值 例如:
protected override void OnInit(事件参数e)
{
//在加载ViewState之前加载控件
碱基.奥尼特(e);
对于(int i=0;i<3;i++)
{
复选框cb=新复选框();
cb=新复选框();
cb.ID=“关键字”+i.ToString();
cb.Text=“关键字”
添加(新复选框());
}
}
//这也可能是一个按钮点击事件?
受保护的覆盖无效加载(事件参数e)
{
基础荷载(e);
如果(第IsPostBack页)
{
//读取复选框值
foreach(MyPlaceHolder.Controls中的复选框控件)
{
bool isChecked=控制。已检查;
字符串关键字=control.Text;
//用这两个值做点什么
}
}
}
希望有帮助
****编辑****
忘了提到这显然只是演示代码-您需要充实一下
有关ASP.Net中动态控件渲染的详细信息,请查看
有关ASP.Net中页面生命周期的更多信息,请查看。老实说,这不是一个好的选择-如果您尊重页面生命周期,ASP.Net将处理所有事情,而无需手动干预。我开始理解你的想法,但是填充了什么?Ahmed,这段代码将复选框控件填充到占位符控件中-就像你的示例一样。这在页面(或控件)初始化方法期间发生。我只是创建了3个-但是你可以创建任意多的复选框。您必须在页面初始化中执行此操作,否则Viewstate-将无法在回发上保留复选框。Checked属性。然后,当在页面加载中发回时(在加载Viewstate之后),您可以在用户提交表单后读取复选框的状态(您可能有按钮?)。我已经更新了代码示例,使其更清晰—希望它会更有意义。
protected override void OnInit(EventArgs e)
{
//load the controls before ViewState is loaded
base.OnInit(e);
for (int i = 0; i < 3; i++)
{
CheckBox cb = new CheckBox();
cb = new CheckBox();
cb.ID = "KeyWord" + i.ToString();
cb.Text = "Key Word"
MyPlaceHolder.Controls.Add(new CheckBox());
}
}
//this could also be a button click event perhaps?
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (Page.IsPostBack)
{
//read the checkbox values
foreach(CheckBox control in MyPlaceHolder.Controls)
{
bool isChecked = control.Checked;
string keyword = control.Text;
//do something with these two values
}
}
}