7

コントロールを動的に追加しようとしています

コード:

AddVisaControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AddVisaControl.ascx.cs" EnableViewState="false" Inherits="Pyramid.AddVisaControl" %>
<%@ Register assembly="BasicFrame.WebControls.BasicDatePicker" namespace="BasicFrame.WebControls" tagprefix="BDP" %>
<div id="divreg" runat="server">
<table id="tbl" runat="server">
<tr>
  <td class="style8"> Visa Number:</td>
  <td class="style20"><asp:TextBox ID="txtUser" Width="160px" runat="server"/></td>
  <td class="style22"> Country Name:</td>
  <td class="style23">
<asp:DropDownList ID="dropCountry" Width="165px" runat="server">
</asp:DropDownList></td>
</tr>
 <tr>
 <td class="style22"> Type of Visa:</td>
 <td class="style23">
<asp:DropDownList ID="dropVisa" Width="165px" runat="server"> </asp:DropDownList></td>
<td class="style22"> Type of Entry:</td>
<td class="style23">
<asp:DropDownList ID="dropEntry" Width="165px" runat="server"> </asp:DropDownList></td>
</tr>
<tr>
<td class="style8">&nbsp; Expiry Date</td>
<td class="style20">
</td>
</tr>
</table>

.cs コード:

以下のコードは、最初に追加ボタンをクリックしたときの問題ですが、適切にコントロールを追加していますが、ブラウザウィンドウを閉じて再度追加ボタンをクリックすると、より多くのコントロールが得られます

   static int i = 0;
    protected void addnewtext_Click(object sender, EventArgs e)
    {
        i++;
        for (int j = 0; j <= i; j++)
        {
            AddVisaControl ac = (AddVisaControl)Page.LoadControl("AddVisaControl.ascx");
            PlaceHolder1.Controls.Add(ac);
            PlaceHolder1.Controls.Add(new LiteralControl("<BR>"));
        }
    }

下の画像で [ビザを追加] ボタンをクリックすると、別のビザの詳細を取得したい

ここに画像の説明を入力

何か案は?前もって感謝します

4

3 に答える 3

14

独自の方法で試すことができる例を 1 つ示します。

アイデアは、作成したボタンを保存するボタンのリストを作成することですbtnCreateDynamic_click

次のような方法があります。

private Button CreateButton(string id, string name)
        {
            Button b = new Button();
            b.Text = name;
            b.ID = id;
            b.Click += new EventHandler(Button_Click);
            b.OnClientClick = "ButtonClick('" + b.ClientID + "')";
            return b;
        }

あなたはbtnCreateDynamic_click次のようなものを持つことができます:

Button b = CreateButton("dinamicBtn"+myDinamicButtonsList.Count.ToString(),"dinamicBtn"+myDinamicButtonsList.Count.ToString());
myDinamicButtonsList.add(b);
and in the pageLoad for example you could do something like

foreach(button btn in myDinamicButtonsList){
    form1.Controls.Add(btn));
}

List<Button> myDinamicButtonsList = new List<Button>();

myDinamicButtonsList各リクエスト後に取得できる場所からどこかに保存する必要があります。

編集:ページの読み込みでは、次のようなものがあります:

if(Session["myDinamicButtons"] == null){
    List<Button> myDinamicButtonsList = new List<Button>();
    Session["myDinamicButtons"] = myDinamicButtonsList;
}

foreach(Button btn in Session["myDinamicButtons"] as List<Button>){
    form1.Controls.Add(btn));
}

私はそれをテストしませんでしたが、動作するはずです。

また、次の情報を追加すると、さらに役立つ場合があります..

クライアントでのボタン クリック イベントにより、ASP.Net ページ ライフサイクルを開始するページ ポストバックが発生します。 ここに画像の説明を入力

サーバー上のボタン クリック イベントは であり、Load または Init イベントで使用しPostBackEventたのと同じメソッド呼び出しを使用できるはずです。CreateMyButton()

于 2013-09-20T10:28:45.337 に答える
1

静的な 'i' 変数を削除し、hidenInput を使用して、作成されたコントロール (またはセッション値) の数を維持する場合は問題ありません。

ただし、次の記事を読んで、動的コントロールを作成するより良い方法を見つけることをお勧めします。

ASP.NET での動的コントロールの作成

于 2013-09-20T10:52:13.137 に答える