2017-05-24 71 views
0

在这篇文章中,我想弄清楚如何在C#Visual Studio中创建动态创建的文本框。在C#Visual Studio中调用动态创建的文本框

Adding additional textboxes to aspx based on xml

然而,当我尝试在我后面的代码来调用这些动态创建的文本框的ID,以找出用户进入他们的文字,我得到的是说,这些ID不存在的错误在当前的情况下。有谁知道我会怎样称呼这些?

+0

确保您在每次回发中重新创建动态控件。 – VDWWD

+0

@VDWWD你是什么意思?你能给个例子吗? –

+0

https://www.aspsnippets.com/Articles/Dynamic-Controls-Made-Easy-in-ASP.Net.aspx – VDWWD

回答

0

想通了!这是我在互联网上搜寻几小时后发现的内容

解决方案: 使用动态控件时,您必须记住它们只会存在,直到下一次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); 

} 现在它运行后,请在文本框中输入任何内容,看看当你点击任何会发生什么导致回发的按钮。文本框仍然保持其状态!

+0

这是一个好的新的。我很高兴你明白了。 – kblau

1

信贷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> 
+0

我在这里试过你的答案,它给了我一个空字符串的列表。你知道为什么或如何解决这个问题吗? –

+0

@Blah Blah请尝试我的转帖。请让我知道,如果我可以帮助你的其他事情。 – kblau

+0

kblau再次没有工作。我相信我的问题是,用户输入信息,当按下按钮保存数据时,会发回帖子并删除文本框以及其中创建的内容。因此,我所有的文本框都是空字符串。另外,作为旁注,文本框由用户填充,而xml确定需要多少个文本框。如果您有任何其他解决方案,将非常感谢 –