繁体   English   中英

如何在asp.net中单击按钮时动态添加控件?

[英]How to add controls dynamically when click button in 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>"));
        }
    }

在下面的图像如果我点击添加更多签证按钮我想获得另一个签证详细信息

在此输入图像描述

有任何想法吗? 提前致谢

我将展示一个你可以按照自己的方式尝试的例子

一个想法是创建一个按钮列表,您可以在其中存储您在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页面生命周期。 在此输入图像描述

您在服务器上的按钮单击事件是PostBackEvent ,您应该能够使用在Load或Init事件中使用的相同方法调用CreateMyButton()

如果删除静态'i'变量并使用hidenInput来维护创建的控件(或会话值),则可以。

但我建议您阅读以下文章,以找到创建动态控件的更好方法:

ASP.NET中的动态控件创建

删除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>"));

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM