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

相关文章

来自专栏蜉蝣禅修之道

android之改变对话框属性

1422
来自专栏我就是马云飞

随手一写就是一个侧滑关闭activity

实现原因 其实侧滑关闭activity在网上也有大量的文章去介绍他,我也有去看,要么是代码实在太多看不下去,要么就是跑了项目没有反应的。唯一的方法还是自己随手鲁...

2076
来自专栏difcareer的技术笔记

dextra DEX/ODEX/ART/OAT分析工具

693
来自专栏Golang语言社区

golang 函数定义及其接口实例

/有返回值 且返回一个 func max(a int, b int) int { if a > b { return a } ...

2545
来自专栏吴小龙同學

Android Creating Custom Views

2126
来自专栏Android开发经验

自适应软键盘的Dialog以及监听软键盘弹起

1673
来自专栏Hongten

lucene加权_模仿百度(Baidu)推广

===================================================================

1064
来自专栏Android相关

CoordiantorLayout与Behavior

CoordinatorLayout继承自FrameLayout,并且实现了NestedScrollingParent2接口用于接收嵌套滑动的事件。并且内部定义了...

462
来自专栏james大数据架构

SwitchButton 开关按钮 的多种实现方式

刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心。 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按...

1967
来自专栏青蛙要fly的专栏

项目需求讨论 — 用Transition做一个漂亮的登录界面

一次在逛Github的时候,看到一个漂亮的登录界面,用的是Transition做的。我就直接贴上地址:

582

扫码关注云+社区