在c#中访问动态创建的复选框值

时间:2013-07-31 11:19:11

标签: c# asp.net

我在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是一个占位符) 任何人都可以告诉我这里有什么不对吗?

3 个答案:

答案 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块。它快速,简单,可重复使用,强大而且最重要,它只是有效!