前两天一直纠结asp.net动态添加控件后,后台获取不到控件的问题,查看了网上很多的回答,可能自己的理解有误或者自己所掌握的知识有限,都没有解决我遇到的问题,经过两天的研究,终于把问题解决了。

  我这里大概是这样的:每点击添加控件的button,就添加一个自定义控件。

    protected void btnadd_Click(object sender, EventArgs e)
{
this.CreateControl();
}
    private void CreateControl()
{
UserControl.control usercontrol = (UserControl.control)Page.LoadControl("UserControl/control.ascx");         int count = this.PlaceHolder1.Controls.Count;
        usercontrol.ID = "VoiceReportControl" + (count + );
        usercontrol.Id = (count + ).ToString();         this.PlaceHolder1.Controls.Add(usercontrol); //注意一定要将控件添加在placeHolder控件中,不然会出现不显示的问题
  
        this.HiddenField1.Value = this.PlaceHolder1.Controls.Count.ToString(); //用隐藏域来存储当前已经添加的自定义控件的个数
     }

然后在Page_Load中

       if (ViewState["firstLoad"] != null)//
{
CreatControl1();//若不是首次加载,则添加控件
}
       ViewState["firstLoad"] = false;//ViewState中可以随意存值,它是用于页面内传值的
/// <summary>
/// 加载控件
/// </summary>
private void CreatControl1()
{
int count = ;
if (int.TryParse(this.HiddenField1.Value, out count))
{
count = Convert.ToInt32(this.HiddenField1.Value);
for (int i = ; i < count; i++)
{
UserControl.control usercontrol = (UserControl.control)Page.LoadControl("UserControl/VoiceReportControl.ascx");
            usercontrol.ID = "VoiceReportControl" + (i + );
            usercontrol.Id = (i + ).ToString();             this.PlaceHolder1.Controls.Add(usercontrol);
          }
       }
     } 

网上好多都说些在OnInit中,但是如果写在这里面,执行的时候控件的viewState并没有被赋值,所以是获取不到隐藏域的值的,所以我选择现在page_Load里。先写到这里吧,欢迎大家一起讨论

asp.net 动态添加自定义控件的更多相关文章

  1. ASP.NET动态添加用户控件的方法

    本文实例讲述了ASP.NET动态添加用户控件的方法.分享给大家供大家参考.具体实现方法如下: 为了让用户控件能ASP.NET页面实现动态添加,首先写一个接口IGetUCable,这个接口有一个函数,返 ...

  2. asp.net动态添加GridView的模板列,并获取列值

    一.动态添加模板列: 1.建立模板列样式: 说明:下边代码可以直接写在aspx文件中,也可以单独建立cs文件:另外,我没有写button.linkButton等控件,意思差不多,不过当需要添加事件时, ...

  3. ASP申请单动态添加实现方法及代码

    一个申请单可以包含N个项目,添加申请单时就需要动态加入代码了. 动态Table表格 以下为引用的内容: <table border="0" width="98%&q ...

  4. asp.net动态添加控件学习

    看了老师的教程后,自己一点感悟记录下来: 1.在页面提交后,动态生成的控件会丢失, 但如果生成控件的代码在pageload中,就可以,原理是每次生成页面都执行生成. 2.动态按件或页面原来控件, 在页 ...

  5. asp.net 动态添加多个用户控件

    动态添加多个相同用户控件,并使每个用户控件获取不同的内容. 用户控件代码: 代码WebControls using System; using System.Collections.Generic;  ...

  6. asp.net 动态添加多附件上传.

    最近有人问起动态多文件上传,想要做到类似于邮箱添加附件的效果,这个功能其实比较简单,就是往form中添加file元素.在用户选择完文件后,再添加一个file控件,由于file控件过多,视觉上不好看,所 ...

  7. ASP.NET动态添加控件一例

    第一次单击页面中有3个Label,第二次单击有6个,第三次单击有9个,也就是每次单击要在上次的状态下再添加3个. 我的方法是,可以通过Session来保存上次的状态,一种解法如下: Test.aspx ...

  8. 使用asp.net动态添加html元素

    HtmlGenericControl gen = new HtmlGenericControl("div");        gen.InnerText = "HtmlG ...

  9. Asp.net 动态添加Meta标签

    下面代码动态设置浏览器文档模式 HtmlHead head = (HtmlHead)Page.Header; HtmlMeta contentType = new HtmlMeta();//显示字符集 ...

随机推荐

  1. 第二章:Posix IPC

    2.1:概述 以下三种类型的IPC合称为“Posix IPC”: Posix消息队列 Posix信号量 Posix共享内存区 Posix IPC在访问它们的函数和描述它们的信息上有一些类似点.本章讲述 ...

  2. Editplus配置VC++(1) 及相关注意事项

    下篇文章:Editplus配置VC++(2) 与/d1reportSingleClassLayout 原本用的是VC++2010 现在换成了Visual Studio 2013,editplus相关配 ...

  3. jQuery判断当前元素是第几个元素

    $("ul li").click(function () { var index = $("ul li").index(this); alert(index); ...

  4. php黑魔法之解析问题

    code如下: <?php $a=$_GET[a]; $b=is_file($a); var_dump($b); ?> 可以看到1.ph< 返回了true 这样不就可以绕过这个的过滤 ...

  5. cocos2d学习笔记

    doxygen工具 生成cocos2d的api文档 位图字体编辑工具 Glyph Designer http://www.71squared.com/glyphdesigner  收费的 CCLabl ...

  6. php : 单例设计演示

    单例 : 保证只有一个实例 <?php /* * 单例设计 */ // 单例: 只能"创造"出它的一个对象实例 class Single{ // 第一步: 私有化构造方法 p ...

  7. 深入浅出设计模式——状态模式(State Pattern)

    模式动机 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的 (stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的.当一个这样的 ...

  8. javascript Demo

    var vm=(function(){ var name="jasper"; var changename=function(v){ name=v; }; return { nam ...

  9. sizeof()和strlen()

    sizeof计算的是栈中大小 P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); text-align: justify } ...

  10. (六)ICMP、ping

    ping命令是ICMP协议 127.0.0.1 ifconfig -all