在线等待:动态加载用户控件的问题!(高手请进)
我建了一个用户控件(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: }