2017-05-24 97 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確定需要多少個文本框。如果您有任何其他解決方案,將非常感謝 –