我正在尝试动态添加控件
码:
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"> 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>"));
- }
- }
在下面的图像如果我点击添加更多签证按钮我想获得另一个签证详细信息
有任何想法吗?提前致谢
解决方法
我将展示一个你可以按照自己的方式尝试的例子
一个想法是创建一个按钮列表,您可以在其中存储您创建的按钮inbtnCreateDynamic_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页面生命周期.
您在服务器上的按钮单击事件是PostBackEvent,您应该能够使用在Load或Init事件中使用的相同方法调用CreateMyButton().