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 条评论
登录 后参与评论

相关文章

来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4848
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3105
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5426
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2526
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2702
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2050
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4005
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2547
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2635

扫码关注云+社区