2013-09-20 4 views
6

Я пытаюсь добавить элементы управления динамическиКак добавить элементы управления динамически при нажатии кнопки в asp.net?

Код:

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>")); 
     } 
    } 

В приведенном ниже изображении Если я нажимаю добавить больше кнопки визового я хочу получить еще деталь визы

enter image description here

Любых идеи? Заранее спасибо

+0

естественно, вы сохранили ваш целой переменной «я» статический –

+0

Определенно нажав на кнопку Add добавит больше элементов управления в соответствии с вашей логикой кода. Так что же вы ищете? Если кнопка «Добавить» не добавляет больше элементов управления? –

+0

Точно, что это проблема, тогда как это решить? – user2500094

ответ

13

Я покажу один пример вы можете попробовать свой собственный путь

Идея будет создать список кнопок, в которых вы бы сохранить кнопки, которые вы создали в 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 следует хранить где-нибудь, откуда он может быть получен после каждого запроса.

EDIT: В загрузке страницы вы могли бы иметь что-то вроде этого:

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 страницу жизненного цикла. enter image description here

Ваш щелчок кнопки события на сервере является PostBackEvent, и вы должны быть в состоянии использовать тот же метод вызова CreateMyButton(), который вы использовали в нагрузке или события Init.

+0

Спасибо за ваш ответ. Позвольте мне следовать вашему пути ... – user2500094

+0

, если вам полезен этот ответ, отметьте галочкой ответ и кнопка для голосования ...... Спасибо – Sajith

0

Удалить static int i = 0;

Измените метод, как показано ниже

protected void addnewtext_Click(object sender, EventArgs e) 
    {  

      AddVisaControl ac = (AddVisaControl)Page.LoadControl("AddVisaControl.ascx"); 
      PlaceHolder1.Controls.Add(ac); 
      PlaceHolder1.Controls.Add(new LiteralControl("<BR>")); 

    } 
+0

Если я использую подобные элементы управления, переписываю – user2500094

+0

, вы используете много стилей css, поэтому что-то действует абсолютное (поля, дополнение) ... не уверен. Но они должны быть относительными –

1

если вы удалите статический «я» переменной и не использовать hidenInput для поддержания не созданных элементов управления (или значение сеанса) вы будете будь умницей.

Но я предлагаю вам прочитать следующую статью, чтобы найти лучший способ создания динамических элементов управления:

Dynamic control creation in ASP.NET

Смежные вопросы