如何检查动态创建的文本框是否填充了数据?

时间:2016-02-19 21:02:50

标签: c# asp.net

我有10行文本框(4列)

如果所有10行都填充了数据,我需要触发事件来执行某些操作。

我是网络开发的新手,我并不真正了解如何在代码隐藏动态生成的HTML网页上引用某个项目。这就是HTML中的样子:

<tr align="center">
 <td style="height: 85px">
    </td>
     <td align="center" style="width: 440px; height: 310px">
       <fieldset class="field1" style="text-align: center">
          <legend class="Eblegend" id="legendObligation2">
              <%=frameName%>
             </legend>
            <asp:Panel ID="pnlTable" runat="server" Width="620px" Height="310px">
            </asp:Panel>
           </fieldset>
    </td>
</tr>

此代码变成可编辑的表格(4列10行)。

我需要检查是否所有方框都已填满,以便我可以启用&#34; next&#34;按钮。

问题是,我不知道如何引用这些&#34;细胞&#34;在动态生成的表上,以便我可以说&#34;如果不为null或为空,请执行此操作&#34;

任何人都可以帮我一把吗?

1 个答案:

答案 0 :(得分:1)

为了能够访问这些值,您还需要在PostBack的情况下创建TextBoxes。这必须很早发生,控件的ID需要相同。

以下代码显示了一个动态创建TextBox并稍后读取该值的小示例:

ASPX:

<form id="form1" runat="server">
    <div>
        <asp:Button ID="btnCreateTextBox" runat="server" Text="Create TextBox" OnClick="btnCreateTextBox_Click" />
    </div>
    <div>
        <asp:PlaceHolder ID="placeHolder" runat="server"></asp:PlaceHolder>
    </div>
    <div>
        <asp:Button ID="btnPostBack" runat="server" Text="Do a postback" />
    </div>
    <div>
        <asp:Label ID="lbl" runat="server" />
    </div>
</form>

<强>代码隐藏:

public partial class WebForm1 : System.Web.UI.Page
{
    protected TextBox txt;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (Request.Form.AllKeys.Any(x => x == "TextBox1"))
            CreateTextBox();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (txt != null)
            lbl.Text = "TextBox value is " + txt.Text;
        else
            lbl.Text = "No value in TextBox";
    }

    protected void btnCreateTextBox_Click(object sender, EventArgs e)
    {
        if (txt == null)
        {
            CreateTextBox();
        }
    }

    private void CreateTextBox()
    {
        txt = new TextBox();
        txt.ID = "TextBox1";
        placeHolder.Controls.Add(txt);
    }
}

重要的是,如果PostBack数据中有值,则在OnInit中使用相同的ID创建TextBox。即使TextBox为空,TextBox的键(样本中的TextBox1)也存在于AllKeys集合中。