在这篇文章中,我想弄清楚如何在C#Visual Studio中创建动态创建的文本框。在C#Visual Studio中调用动态创建的文本框
Adding additional textboxes to aspx based on xml
然而,当我尝试在我后面的代码来调用这些动态创建的文本框的ID,以找出用户进入他们的文字,我得到的是说,这些ID不存在的错误在当前的情况下。有谁知道我会怎样称呼这些?
在这篇文章中,我想弄清楚如何在C#Visual Studio中创建动态创建的文本框。在C#Visual Studio中调用动态创建的文本框
Adding additional textboxes to aspx based on xml
然而,当我尝试在我后面的代码来调用这些动态创建的文本框的ID,以找出用户进入他们的文字,我得到的是说,这些ID不存在的错误在当前的情况下。有谁知道我会怎样称呼这些?
想通了!这是我在互联网上搜寻几小时后发现的内容
解决方案: 使用动态控件时,您必须记住它们只会存在,直到下一次postback.ASP.NET才会重新创建动态添加的控件。如果您需要多次重新创建控件,则应该在PageLoad事件处理程序中执行控件创建(因为您当前仅使用Condition:!IsPostabck仅为第一次创建TextBox)。这具有允许您在动态控制中使用视图状态的额外好处。即使视图状态通常在Page.Load事件之前恢复,如果您在PageLoad事件的处理程序中创建控件,ASP.NET将应用PageLoad事件处理程序结束后的任何视图状态信息。
所以,删除条件:!IsPostback,这样每次页面加载时,TextBox控件也被创建。在PageLoad处理程序完成后,您还将看到保存的文本状态框。 [显然你没有禁用ViewState! ]
例子:
保护无效的Page_Load(对象发件人,EventArgs的) {
TextBox txtBox = new TextBox();
// Assign some text and an ID so you can retrieve it later.
txtBox.ID = "newButton";
PlaceHolder1.Controls.Add(txtBox);
} 现在它运行后,请在文本框中输入任何内容,看看当你点击任何会发生什么导致回发的按钮。文本框仍然保持其状态!
这是一个好的新的。我很高兴你明白了。 – kblau
信贷Adding additional textboxes to aspx based on xml
这里是我的全部代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
namespace WebApplication4
{
public partial class WebForm15 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsCallback)
{
//credit to https://stackoverflow.com/questions/44076955/adding-additional-textboxes-to-aspx-based-on-xml#comment75336978_44078684
const string xml = @"<Number>
<Num>1</Num>
<Num>2</Num>
<Num>3</Num>
</Number>";
XDocument doc = XDocument.Parse(xml);
int i = 0;
foreach (XElement num in doc.Root.Elements())
{
TextBox box = new TextBox
{
ID = "dynamicTextBox" + i,
Text = num.Value,
ReadOnly = false
};
divToAddTo.Controls.Add(box);
divToAddTo.Controls.Add(new LiteralControl("<br/>"));
i++;
}
}
}
protected void BtnGetValues_Click(object sender, EventArgs e)
{
IList<string> valueReturnArray = new List<string>();
foreach (Control d in divToAddTo.Controls)
{
if (d is TextBox)
{
valueReturnArray.Add(((TextBox)d).Text);
}
}
//valueReturnArray will now contain the values of all the textboxes
}
}
}
下面是ASPX:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm15.aspx.cs" Inherits="WebApplication4.WebForm15" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div id="divToAddTo" runat="server" />
<asp:Button runat="server" ID="BtnGetValues" Text="GetValues" OnClick="BtnGetValues_Click" />
</form>
</body>
</html>
我在这里试过你的答案,它给了我一个空字符串的列表。你知道为什么或如何解决这个问题吗? –
@Blah Blah请尝试我的转帖。请让我知道,如果我可以帮助你的其他事情。 – kblau
kblau再次没有工作。我相信我的问题是,用户输入信息,当按下按钮保存数据时,会发回帖子并删除文本框以及其中创建的内容。因此,我所有的文本框都是空字符串。另外,作为旁注,文本框由用户填充,而xml确定需要多少个文本框。如果您有任何其他解决方案,将非常感谢 –
确保您在每次回发中重新创建动态控件。 – VDWWD
@VDWWD你是什么意思?你能给个例子吗? –
https://www.aspsnippets.com/Articles/Dynamic-Controls-Made-Easy-in-ASP.Net.aspx – VDWWD