【问题标题】:Access dynamically created checkbox values in c#在 C# 中访问动态创建的复选框值
【发布时间】:2015-07-08 23:03:09
【问题描述】:

我在asp.net中动态添加了CheckBox

CheckBox cb = new CheckBox();
cb.Text = "text";
cb.ID = "1";

我可以在pageLoad 本身中通过c# 访问这个CheckBox,就在声明上述代码之后。 但是当我在单击按钮后尝试访问这些值时,我得到的是空值。

CheckBox cb1 = (CheckBox)ph.FindControl("1");
Response.Write(cb1.Text);
   ph.Controls.Add(cb);

(ph 是占位符) 谁能告诉我这里出了什么问题?

【问题讨论】:

  • @mcalex 它只是一个文本
  • 如果您要动态创建控件树,则无论 Page.IsPostback == true 是否都必须这样做,您能否详细说明在哪里创建这些控件(哪个事件)?
  • 您是否在控件中添加了复选框?
  • @OndrejSvejdar 它已添加到页面加载中并且工作正常
  • @NoIdeaForName 是的..我会将 xtra 代码添加到我的问题中

标签: c# asp.net


【解决方案1】:

您需要在每次页面回发时重新创建复选框,在 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());
}

【讨论】:

  • 我已经在做。前三行在页面加载中。
【解决方案2】:

点击按钮后,它会发回刷新状态的页面。如果您希望这些值保持不变,那么您需要将它们放在 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;
}

【讨论】:

  • 在按钮单击时我什至找不到这些控件..这就是我要解决的问题
  • IIRC 当您单击按钮时,所有控件都将被清除,因为整个页面都是通过表单发布的。
  • 当我按下按钮时,我真的很想将那些动态创建的控件保留在那里。有没有解决方法可以解决问题...否则我完全迷失了
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    相关资源
    最近更新 更多