我有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;
任何人都可以帮我一把吗?
答案 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
集合中。