我在asp.net中动态添加了CheckBox
CheckBox cb = new CheckBox();
cb.Text = "text";
cb.ID = "1";
在声明上述代码之后,我可以通过CheckBox
本身的c#访问此pageLoad
。
但是当我在单击按钮后尝试访问此值时,我将获得空值。
CheckBox cb1 = (CheckBox)ph.FindControl("1");
Response.Write(cb1.Text);
ph.Controls.Add(cb);
(ph
是一个占位符)
任何人都可以告诉我这里有什么不对吗?
答案 0 :(得分:2)
每次页面在Page_Load
事件中回发时都需要重新创建复选框,因为它会动态添加到页面中。
然后您可以稍后在按钮点击事件中访问该复选框。
//嗨这里更新了示例代码... 源
<body>
<form id="frmDynamicControl" runat="server">
<div>
<asp:Button ID="btnGetCheckBoxValue" Text="Get Checkbox Value" runat="server"
onclick="btnGetCheckBoxValue_Click" />
</div>
</form>
</body>
背后的代码
protected void Page_Load(object sender, EventArgs e)
{
CheckBox cb = new CheckBox();
cb.Text = "text";
cb.ID = "1";
frmDynamicControl.Controls.Add(cb);
}
protected void btnGetCheckBoxValue_Click(object sender, EventArgs e)
{
CheckBox cb1 = (CheckBox)Page.FindControl("1");
// Use checkbox here...
Response.Write(cb1.Text + ": " + cb1.Checked.ToString());
}
答案 1 :(得分:1)
单击按钮后,它将回发将刷新状态的页面。如果您希望值保持持久,那么您需要在ViewState
或类似内容中备份它们。
private bool CheckBox1Checked
{
get { return (ViewState["CheckBox1Checked"] as bool) ?? false; }
set { ViewState["CheckBox1Checked"] = value; }
}
void Page_load(object sender, EventArgs e)
{
CheckBox cb = new CheckBox();
cb.Text = "text";
cb.ID = "1";
cb.Checked = CheckBox1Checked;
cb.OnCheckedChanged += CheckBox1OnChecked;
// Add cb to control etc..
}
void CheckBox1OnChecked(object sender, EventArgs e)
{
var cb = (CheckBox)sender;
CheckBox1Checked = cb.Checked;
}
答案 2 :(得分:0)
我稍后会在这里,但我只是这样做:
try{
if(Request.Form[checkboxId].ToString()=="on")
{
//do whatever
}
}catch{}
如果未选中复选框,则它不会出现在Form请求中,因此会出现try catch块。它快速,简单,可重复使用,强大而且最重要,它只是有效!