6

CheckBox在 asp.net 中动态添加了一个

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是占位符)谁能告诉我这里有什么问题?

4

3 回答 3

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());
}
于 2013-07-31T12:20:56.040 回答
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;
}
于 2013-07-31T11:33:36.293 回答
0

我有点晚了,但我只是这样做:

try{
if(Request.Form[checkboxId].ToString()=="on")
{
//do whatever
}
}catch{}

如果未选中复选框,它将不会出现在表单请求中,因此会出现 try catch 块。它快速、简单、可重复使用、强大且最重要的是,它可以正常工作!

于 2015-07-08T15:03:09.047 回答