2017-05-24 9 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

はそれを考え出しました!ここでは、何時間もインターネットを掃除した後に見つけたものを紹介します。

解決方法: ダイナミックコントロールを使用する場合、次のポストバックまでしか存在しないことを忘れないでください.ASP.NETは動的に追加されたコントロールを再作成しません。コントロールを何度も再作成する必要がある場合は、PageLoadイベントハンドラでコントロールの作成を実行する必要があります(現在は、Condition:!IsPostabckを使用して初めてTextBoxを作成するだけです)。これには、動的コントロールでビューステートを使用できるという追加の利点があります。 PageLoadイベントの前にビューステートが正常に復元されても、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では必要なテキストボックスの数が決まります。あなたが他の解決策を持っているなら、それは大いに評価されるでしょう。 –

関連する問題