想动态生成个控件,提示错误了

seesea125 2003-08-18 04:08:29
Button mybtn=new Button();
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
mybtn.Visible=true;
mybtn.Style["Z-INDEX"]="104";
mybtn.Style["POSITION"]="absolute";
mybtn.Style["LEFT"]="50px";//.Insert(0,"5px");
mybtn.Style["TOP"]="100px";
this.Controls.Add(mybtn);
InitializeComponent();
base.OnInit(e);

this.mybtn.Click += new System.EventHandler(this.btnclick);
}
提示错误:
类型“Button”的控件“_ctl0”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: 类型“Button”的控件“_ctl0”必须放在具有 runat=server 的窗体标记内。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
...全文
28 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
seesea125 2003-08-18
  • 打赏
  • 举报
回复
非常谢谢蓝风, Meyer() ,kent诸位高手,我加分了
crodling 2003-08-18
  • 打赏
  • 举报
回复
楼上两位所言极是
crodling 2003-08-18
  • 打赏
  • 举报
回复
注意你改动的时候public class detail: System.Web.UI.Page

看看这里是不是也变成了detail了,如果是的话,就把类名改成其他,避免重复
Meyer 2003-08-18
  • 打赏
  • 举报
回复
1。
不要在OnInit()里添加你的代码,这个函数由开发环境管理,
你的代码如果丢失,没人同情你

2。动态加在button不是这样写的

private void Page_Load(object sender, System.EventArgs e)
{

Button mybtn=new Button();
mybtn.Visible=true;
mybtn.Style["Z-INDEX"]="104";
mybtn.Style["POSITION"]="absolute";
mybtn.Style["LEFT"]="50px";//.Insert(0,"5px");
mybtn.Style["TOP"]="100px";
this.Controls[1].Controls.Add(mybtn);
//this.Controls[1]是的类型是System.Web.UI.HtmlControls.HtmlForm 他才是真正的页面控件的容器

}
chnking 2003-08-18
  • 打赏
  • 举报
回复
Button mybtn=new Button();
this.FindControl("WebForm2").Controls.Add(mybtn);
seesea125 2003-08-18
  • 打赏
  • 举报
回复
真是奇怪啊,看我的<form id="detail" runat="server">
cs
protected System.Web.UI.HtmlControls.HtmlForm detail;
提示:成员名称不能和他们的封闭类型相同
没有办法,难道以后动态生成的控件都要放panel里面?
crodling 2003-08-18
  • 打赏
  • 举报
回复
哦,我知道了你在这里把<form id="form1" runat="server">form1 改成formtest1
然后cs中
protected System.Web.UI.HtmlControls.HtmlForm formtest1;
crodling 2003-08-18
  • 打赏
  • 举报
回复
不会吧?我这边是通过的啊?你看
aspx中

<form id="form1" runat="server">

cs中
protected System.Web.UI.HtmlControls.HtmlForm form1;
seesea125 2003-08-18
  • 打赏
  • 举报
回复
楼上,这样行吗?页面上本来就有一个form1了,如果还这么写,提示”成员名称不能和他们的封闭类型相同“,没办法我换成form2了,然后this.form2.Controls.Add(mybtn);提示
未将对象引用设置到对象的实例。
行 39: this.form1.Controls.Add(mybtn);
行 40: this.mybtn.Click += new System.EventHandler(this.btnclick);
行 41:
detail.aspx.cs 行: 39
seesea125 2003-08-18
  • 打赏
  • 举报
回复
楼上,这样行吗?页面上本来就有一个form1了,如果还这么写,提示”成员名称不能和他们的封闭类型相同“,没办法我换成form2了,然后this.form2.Controls.Add(mybtn);提示
未将对象引用设置到对象的实例。
行 39: this.form1.Controls.Add(mybtn);
行 40: this.mybtn.Click += new System.EventHandler(this.btnclick);
行 41:
detail.aspx.cs 行: 39
crodling 2003-08-18
  • 打赏
  • 举报
回复
找到解决方法了
加上这句
protected System.Web.UI.HtmlControls.HtmlForm form1;
seesea125 2003-08-18
  • 打赏
  • 举报
回复
to: wacle([Smile!]) 写在你说的这里也是一样错误提示
to:kent ,this没有form方法啊
crodling 2003-08-18
  • 打赏
  • 举报
回复
奇怪,这个写在cs代码里面就通不过,写在aspx文件里面就可以
wacle 2003-08-18
  • 打赏
  • 举报
回复
相信你把这段代码写在page_load的if(!this.ispostback)应该就没问题了
chnking 2003-08-18
  • 打赏
  • 举报
回复
控件要添加在Form标记中的,你的添加方法是添加在boby中,form之外了:

this.Form的id.Controls.Add(mybtn);
crodling 2003-08-18
  • 打赏
  • 举报
回复
页面放个panel.然后用
this.panel1.Controls.Add(mybtn);

至于为什么this.Controls.Add(mybtn);会出错也不清楚。站个位置看后来人评论

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧