专栏首页kwcodeasp.net动态增加服务器端控件并提交表单

asp.net动态增加服务器端控件并提交表单

为什么要用原生的呢?

1、目的 原生出现浏览器兼容性问题 极少,不用测试多浏览兼容性 。需要考虑到市面上的其他垃圾浏览器。 

2、性能不好 如果不考虑第一条 你可以换一种方式

直接上代码

.aspx页面

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>DEMO</title>
</head>
<body>
    <form id="form1" runat="server">
        
        <br />
        <br />
        <asp:Label ID="Label2" runat="server" Text="动态控件"></asp:Label>
        <asp:PlaceHolder ID="phBody" runat="server"></asp:PlaceHolder>

        <br />
        <br />
        <br />
        <br />
        <br />
        <asp:Button ID="btnAdd" runat="server" OnClick="btnAdd_Click" Text="加三个动态控件" />
        <asp:Button ID="btnDelLast" runat="server" OnClick="btnDelLast_Click" Text="删除后面三个" />
        <br />
        <br />
        <br />
        <br />
        <asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="提交保存" />
        <br />
        <br />
        <asp:Label runat="server" ID="lbMsg" ForeColor="Red"></asp:Label>
    </form>
</body>
</html>

后台.cs代码

  protected void Page_Load(object sender, EventArgs e)
        {
            #region 初始化控件 

            if (ViewState["AddedControl"] == null)
            {
                ViewState["AddedControl"] = 1;
                CreateControl();
            }
            else
            {
                int cout = Convert.ToInt32(ViewState["AddedControl"]);
                for (int i = 0; i < cout; i++)
                {
                    CreateControl();
                }
            }
            #endregion

            if (!IsPostBack)
            {

            }
        }
        /// <summary>
        /// 给容器phBody创建动态控件
        /// </summary>
        /// <param name="index"></param>
        public void CreateControl()
        {
            Panel plBody = new Panel();
            TextBox txt = new TextBox();
            txt.Text = "";
            plBody.Controls.Add(txt);

            TextBox txt2 = new TextBox();
            txt2.Text = "";
            plBody.Controls.Add(txt2);

            TextBox txt3 = new TextBox();
            txt3.Text = "";
            plBody.Controls.Add(txt3);
              
            phBody.Controls.Add(plBody);
        }
        //获取动态添加的控件值
        protected void btnSave_Click(object sender, EventArgs e)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            for (int i = 0; i < phBody.Controls.Count; i++)
            {
                Control ctrl = phBody.Controls[i];

                for (int j = 0; j < ctrl.Controls.Count; j++)
                {
                    if (j <= 3)
                    {
                        TextBox txt = ctrl.Controls[j] as TextBox;
                        if (txt != null)
                        {
                            sb.Append(txt.Text);
                        }
                    }

                }
            }
            lbMsg.Text = sb.ToString();
        }
        //加三行
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            if (ViewState["AddedControl"] == null)
            {
                ViewState["AddedControl"] = 1;
            }
            else
            {
                int cout = Convert.ToInt32(ViewState["AddedControl"]);
                ViewState["AddedControl"] = cout + 1;
            }
            CreateControl();
        }
        //删除最后一行动态添加的控件
        protected void btnDelLast_Click(object sender, EventArgs e)
        {
            int index = phBody.Controls.Count - 1;
            phBody.Controls.RemoveAt(index);
            if (ViewState["AddedControl"] == null)
            {
                ViewState["AddedControl"] = 0;
            }
            else
            {
                int cout = Convert.ToInt32(ViewState["AddedControl"]);
                ViewState["AddedControl"] = cout - 1;
            }
        }

预览效果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求

    <div > <input type="file" name="FileUpload" id="FileUpl...

    纯粹是糖
  • setInterval做定时器

    <script src="/js/jquery-1.8.3.min.js"></script> <script> $(f...

    纯粹是糖
  • asp.net动态解析用户控件(UserControl)

    模块化的时候需要用到: #region asp.net解析用户控件 /// <summary> /// asp....

    纯粹是糖
  • 【程序人生】糟糕的程序员你会做?

    一个好程序员不好做,那么一个糟糕的程序应该不难吧! 秘籍一:让你看不懂我写的是什么 都说让人看不懂的代码,才是牛逼代码。一类是算法高深,一般人实在是看不懂。另一...

    程序员互动联盟
  • 美军方支持研发可治疗精神疾病的人工智能技术

    由美国军方资助的研究人员正在开发能刺激大脑治疗精神疾病的人工智能技术。这些是“闭环”脑植入术, 使用算法来检测与情绪紊乱相关的模式, 然后传递电脉冲以回应一个人...

    人工智能快报
  • 一段让我吃惊的javascript代码。(就两句) 发送键盘命令生成get set脚本。

    ????在IE中拷贝文字到剪贴板,微软使用了2种剪贴板模式:字符模式和html模式。?如果我们从IE中选定一些内容拷贝到写字板,通常就丢掉了html的标签。如果...

    田春峰-JCJC错别字检测
  • 三种交换

    电路交换:在使用电路交换进行通话之前,必须先拨号建立一条连接,通信线路为通信双方用户专用,数据直达。 优点:

    葆宁
  • mininet+floodlight使用(一)

    如果路径错误(如下图,就把target下floodlight.jar复制到flootlight根目录下再尝试)

    Enterprise_
  • 前端模块化开发

    其实对前端模块化开发的接触时间并不多,很多见解都是别人的,或者是偏的, 还是乐意记录下来,谁让我一天一个念头 说到前端模块化开发,其实是说 javascript...

    用户1394570
  • RFID Hacking②:PM3入门指南

    0x00 前言 Proxmark3是由Jonathan Westhues在做硕士论文中研究Mifare Classic时设计、开发的一款开源硬件,可以用于RF...

    用户1631416

扫码关注云+社区

领取腾讯云代金券