【问题标题】:Cannot Fetch Text Property for Dynamically Generated Textboxes c#无法获取动态生成的文本框的文本属性 c#
【发布时间】:2023-03-09 12:20:01
【问题描述】:

我创建一个在服务器上运行的DIV,然后动态创建TextBox 控件并将其添加到DIV。后来,当我尝试读取 DIV 中每个 TextBox 的 Text 属性时,我无法获取控件...

我该如何做到这一点?

在服务器上运行的 DIV...

<div id="divBonusPercents" runat="server"></div>

根据某些条件动态添加文本框...

 foreach (ListItem item in lbTeamsEOM.Items)
                        if (item.Selected)
                        {
                            // add controls for team bonus %
                            TextBox tbPercent = new TextBox();
                            tbPercent.Text = "15%";
                            tbPercent.ID = "tbPercent" + item.Value;
                            divBonusPercents.Controls.Add(tbPercent);
                        }     

获取DIV中每个TextBox的值

List<string> lBonusPercent = new List<string>();
            foreach (Control c in divBonusPercents.Controls)
                if (c.GetType() == typeof(TextBox))
                    lBonusPercent.Add(((TextBox)c).Text);   

【问题讨论】:

  • 在什么时候添加文本框?在初始 PageLoad 期间还是之后?
  • 稍后在下一个向导步骤
  • 那么我认为这不会起作用,尽管我不确定 NextWizardStep 何时发生(从未在 asp.net 中做过向导)。由于 asp.net 页面生命周期的要求,在 PageLoad 之后创建的控件非常棘手。更好的方法是在设计时对您可能想要的所有内容进行分类,并使它们不可见。然后根据需要使它们可见。
  • 所以我唯一的选择是用大约 100 个文本框来膨胀 DOM,而在 95% 的时间里我可能只需要 3-6 个文本框?
  • 一点也不。您可以使用回发 API 在 javascript 中执行此操作。我就是这样。您可以创建 TextBox01 到 TextBox10 并使用一些状态来计算它们在上下文中的含义(可能不是一个好主意)。你可以做很多事情。您还可以为向导的每个步骤使用单独的页面。选项继续...

标签: c# asp.net typeof dynamic-controls servercontrols


【解决方案1】:

以前的海报是正确的,因为除非在页面生命周期中足够早地创建它们,否则您将无法访问 TextBoxes 的 Text 属性。

但是,实际发布的表单元素应该仍然存在于 HTTP 请求中。 Request.Form[**TextBoxObjectHere**.UniqueID] 应该返回表单帖子文本框中的任何文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多