在线等待:动态加载用户控件的问题!(高手请进)

real52525 2007-05-31 08:22:10
我建了一个用户控件(WebUserControl.ascx)里面有三个TextBox(TextBox1,2,3)并暴露了其text属性.我想在主页面打开时加载多个此用户控件并给各用户控件中TextBox1赋值.当客户客户端给TextBox2和3赋值后点击按钮时能读出三个TextBox中的值.代码如下:
WebUserControl.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>

WebUserControl.ascx.cs:

private string _item1, _item2, _item3;
public string Item1
{
set
{
_item1 = value;
}
get
{
return _item1;
}
}
public string Item2
{
set
{
_item2 = value;
}
get
{
return _item2;
}
}
public string Item3
{
set
{
_item3 = value;
}
get
{
return _item3;
}
}
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = _item1;
_item2 = TextBox2.Text;
_item3 = TextBox3.Text;
}


Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Debug="true" %>
<%@ Register TagPrefix="WebUserControl" TagName="WebUserControl" Src="~/WebUserControl.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
</asp:Panel>
<asp:Button ID="Btn" runat="server" Text="Button" OnClick="Btn_Click" />
</div>
</form>
</body>
</html>



Default.aspx.cs

public partial class _Default : System.Web.UI.Page
{
override protected void OnInit(EventArgs e)
{

for (int i = 0; i < 5; i++)
{
WebUserControl mycontrol = (WebUserControl)LoadControl("WebUserControl.ascx");
mycontrol.Attributes.Add("runat", "server");
mycontrol.Attributes.Add("ID", "Mycontrol" + i.ToString());
mycontrol.Item1 = i.ToString();
Panel1.Controls.Add(mycontrol);
}

base.OnInit(e);
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Btn_Click(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
WebUserControl myct=(WebUserControl)Panel1.FindControl("Mycontrol"+i.ToString());
Response.Write("item1:" + myct.Item1+"<br>item2:"+myct.Item2+"<br>item3:"+myct.Item3);
}
}
}



现在的问题是当我点击提交按钮时提示:

未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 43: {
行 44: WebUserControl myct=(WebUserControl)Panel1.FindControl("Mycontrol"+i.ToString());
行 45: Response.Write("item1:" + myct.Item1+"<br>item2:"+myct.Item2+"<br>item3:"+myct.Item3);
行 46: }
行 47: }

...全文
233 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpp2017 2007-05-31
  • 打赏
  • 举报
回复
mycontrol.Attributes.Add("ID", "Mycontrol" + i.ToString()); ==> mycontrol.ID = "Mycontrol" + i.ToString(); mycontrol.Attributes.Add("ID", "Mycontrol" + i.ToString()); 这样定只是改变在客户端html中的id属性
liuzhou0413 2007-05-31
  • 打赏
  • 举报
回复
mycontrol.Attributes.Add("ID", "Mycontrol" + i.ToString());鏀逛负:mycontrol.ID = "Mycontrol" + i.ToString();
amandag 2007-05-31
  • 打赏
  • 举报
回复
mycontrol.Attributes.Add("ID", "Mycontrol" + i.ToString());
========================================================
mycontrol.ID = "Mycontrol" + i.ToString();
lnwuyaowei 2007-05-31
  • 打赏
  • 举报
回复
for (int i = 0; i < 5; i++)
{
WebUserControl mycontrol = (WebUserControl)LoadControl("WebUserControl.ascx");

mycontrol.Attributes.Add("runat", "server");
mycontrol.Attributes.Add("ID", "Mycontrol" + i.ToString());
//notice:use ID
mycontrol.ID = "Mycontrol" + i.ToString();
mycontrol.Item1 = i.ToString();
Panel1.Controls.Add(mycontrol);
}

62,071

社区成员

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

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

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

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