解决方案 »
- 请大家帮我看看我这条SQL语句哪错了
- 或许是个比较弱智的问题
- 一个问题刷新,后退的问题
- 寻Visual Studio.NET 2003 企业架构版第二张盘高速下载
- 简单的打印问题
- 怎样把flash加入网页中?在线等!
- **************************请问关于CACHE的问题*********************************
- 那为GG JJ帮忙把这段代码给改一下!在线等……
- 怎样把物理路径转化成http://lochost/Classmate/M1682.jp
- 请教一个关于DropDownList的问题,50分相送,谢谢!
- 在windows 2008 server R2 配置ASP.NET 2.0有什么不同吗
- linq问题
2、你可以看一看生成的客户端代码,在前台用Jquery取取看。
你是POST后找不到?Asp.net???
http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i
http://blog.sina.com.cn/s/blog_5a7775e30101eczz.html
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Repeater ID="rpt1" runat="server">
<ItemTemplate>
<p> 我是一个动态生成的textbox奥!我的行id是<%#Eval("key") %></p> </ItemTemplate> </asp:Repeater> <asp:Button ID="submitBtn" runat="server" Text="我是提交按钮奥" OnClick="submitBtn_Click" />
</form>
</body>
</html>
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Dictionary<string, string> testdic = new Dictionary<string, string>();
testdic.Add("1", "1");
testdic.Add("2", "2");
testdic.Add("3", "3");
testdic.Add("4", "4"); rpt1.DataSource = testdic;
rpt1.DataBind(); //下面动态创建textbox添加到repeater里面去
for (int i = 0; i < rpt1.Items.Count; i++)
{
TextBox txtBox = new TextBox();
txtBox.ID = "creatbox_" + i.ToString();
txtBox.Text = "creatbox_" + i.ToString(); rpt1.Items[i].Controls.Add(txtBox);
}
}
} protected void submitBtn_Click(object sender, EventArgs e)
{
//尝试读取动态控件的值
for (int i = 0; i < rpt1.Items.Count; i++)
{
string curVal = Request.Form["rpt1$ctl" + i.ToString("00") + "$creatbox_" + i.ToString()] + "";
TextBox txtBox = new TextBox();
txtBox.ID = "creatbox_" + i.ToString();
txtBox.Text = curVal; rpt1.Items[i].Controls.Add(txtBox);
}
}
}
你可以先做这样一个测试,来验证你是否真的懂得了asp.net所谓“动态生成控件”技术。你可以把一个Button按钮拖到页面上,双击它产生注册一个处理方法(但是方法里可以先空着,什么都不做)。好了,接下来,你就可以开始手工测试了。可以在你开发调试时任何时候,点击这个按钮,然后观察页面上的各种“动态控件”有没有丢失,或者即使没有丢失的话那么状态是否丢失了(例如动态设置的颜色变成默认值了)。你也可以设置监听机制看看此时是否多余地访问了数据库。一个正常地asp.net应用程序,它在这个最简单的button“回发测试”下,不会丢失控件,也不会丢失控件的任何状态,也不会去浪费巨大的CPU时间去读取数据库。如果有任何一种bug,你应该先搞懂该如何进行asp.net编程,找个人去学学。你想,如果你去csdn之类的地方问来的所谓解决方案,连这个简单的测试都通不过,那么你的程序越来越乱了。往往越是简单而根本性的测试,你反而越是应该注意。
http://bbs.csdn.net/topics/380169102不过了解原理,能够准确及时地发现自欺欺人的bug缠身,不一定就会正确地编程。正确地编程需要正规地学习控件开发技术。如果没有这个机会,那么我建议你使用那些入门教程上的基本方法,例如在DataList、ListView、ObjectDataSource控件等的辅助下的简单编程,不要一上来就搞高级的玩意儿。
我的问题应该就是解决不了的,动态生成的控件是没办法使用FindControl获取的。已经改寻其他实现方法。100分已根据各楼回答给与相应分数。祝大家工作顺利!
控件动态生成的时候,我们一般都是给他赋了个ID。
添加控件到前台后,自动又生成了一个clientID。
看了下,好像没办法给ClientID赋值。
8楼那种可以实现,但是应该是存在问题的,规则变了就不对了。
不过可以手动添加个控件,然后后台取他的ClientID,再根据这个修改,就不怕规则变化了。
抱歉,头脑有点晕,上面写错了。。
我现在的方式是:建立个静态变量数组,比如我的 List<DropDowmList>
所有生成的都加入到数组中,然后在Page_Load中,循环把数组中的再加入到要加入的容器中,并且绑定事件。
经测试通过了。