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;
}
}
预览效果

asp.net动态增加服务器端控件并提交表单的更多相关文章
- asp.net动态网站repeater控件使用及分页操作介绍
asp.net动态网站repeater控件使用及分页操作介绍 1.简单介绍 Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功 ...
- ASP.NET动态添加用户控件的方法
本文实例讲述了ASP.NET动态添加用户控件的方法.分享给大家供大家参考.具体实现方法如下: 为了让用户控件能ASP.NET页面实现动态添加,首先写一个接口IGetUCable,这个接口有一个函数,返 ...
- 037——VUE中表单控件处理之表单修饰符:lazy/number/trim
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- wpf动态增加删除控件
我在xaml中定义了一个名字为morepictureWrapPan为WrapPanel,然后将控件添加在此WrapPanel中.由于要实现控件的删除功能,所以增加的textbox和button的名字都 ...
- asp.net动态解析用户控件(UserControl)
模块化的时候需要用到: #region asp.net解析用户控件 /// <summary> /// asp.net 解析用户控件 /// </summary> /// &l ...
- WebForm 【简单控件】【表单元素】
一.HTML 表单元素复习 (1)文本类 文本框:<input type="text" name="" id="" value=&qu ...
- (转) android里,addContentView()动态增加view控件,并实现控件的顶部,中间,底部布局
http://blog.csdn.net/bfboys/article/details/52563089
- 关于bootstrap--表单控件(disabled表单禁用、显示表单验证的样式)
1.disabled: (1)在input中加入disabled可使表单禁用,如图: <input class="form-control input-lg" id=&quo ...
- 上传预览 easyui部分控件获取focuse 表单验证
js: $(document).ready(function () { //$('#creater').combobox({ // url: '/VMS.UI/BindData/ScheamData? ...
随机推荐
- 小学四则运算APP 第一个冲刺 第二天
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次程序是为了解决上次判断的问题,但是还是出现新的问题页面无法调整,需要进行改进 本次改进代码 ...
- 从零开始学Kotlin-枚举(9)
从零开始学Kotlin基础篇系列文章 枚举的定义 一个类的对象是有限且固定的,这种实例有限且固定的类称为枚举类; 枚举常量用逗号分隔,每个枚举常量都是一个对象; enum class EnumDemo ...
- C语言入门:05.scanf函数
一.变量的内存分析 1.字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. (1)内存以“字节为单位”
- Docker(十一)-Docker commit创建镜像
创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 修改已有的镜像 查看已有的镜像: $ sudo docker images REPOSITO ...
- MyBatis中Mapper的返回值类型
insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.del ...
- AOP 环绕通知 集成了前置 后置 返回通知等功能
AOP 环绕通知 集成了前置 后置 返回通知等功能
- 【枚举Day1】20170529-2枚举算法专题练习 题解
题目: http://www.cnblogs.com/ljc20020730/p/6918328.html 评测器:cena 评测记录: 1.OneMoreRectangle 一个矩形 ●如果任意枚举 ...
- 【bzoj4730】 Alice和Bob又在玩游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=4730 (题目链接) 题意 给出一个森林,两个人轮流操作,每次把一个节点以及它的祖先全部抹去,无节点可 ...
- POJ 1062 昂贵的聘礼(图论,最短路径)
POJ 1062 昂贵的聘礼(图论,最短路径) Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女 ...
- tmux终端复用/tmate终端共享
目录 tmux tmate tmux 一种终端复用工具,是终端中的窗口管理器.常见的一种用途是在关闭父shell时保持程序运行(常用于ssh访问断开连接后保持运行).linux上可通过包管理器进行安装 ...