在這篇文章中,我想弄清楚如何在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