DataList中的用户控件的问题 你的用户控件是在DataList的模板中吗?如果是的话你需要在DataList的ItemDataBound或ItemCreated事件中先找到这个控件,然后才能设定属性。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样使用你的用户控件:1:先将用户控件拖到你的目标网页2:查看HTML代码,找到定义你的用户控件的标签,比如你的叫: <uc1:ReplyUC id="ReplyUC1" ...在你的服务端定义如下 protected ReplyUC ReplyUC1;3:然后,直接对ReplyUC1进行使用 是啊,我的用户控件是在<ItemTemplate>中啊, private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e){Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");myReply.mytopicid = topicid;}错误还是为未将对象引用设置到对象的实例。 private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e){Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");myReply.mytopicid = topicid;}这样写也还是"错误还是为未将对象引用设置到对象的实例"帮帮帮忙啊,各位大侠,谢谢了 private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e){if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");if(myReply!=null)myReply.mytopicid = topicid;}} 大侠又出错了啊发生类型为 System.StackOverflowException 的异常。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.StackOverflowException: 发生类型为 System.StackOverflowException 的异常。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪: [StackOverflowException: 发生类型为 System.StackOverflowException 的异常。] <asp:datalist id="DataList1" runat="server" Width="733px"><HeaderTemplate><FONT face="宋体"><TABLE id="Table2" width="100%" align="center" border="1"><TR><TD width="20%"> 作者</TD><TD width="79%"><B>问题<asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"topic")%>'>Label</asp:Label></B></TD></TR></TABLE></FONT></HeaderTemplate><ItemTemplate><TABLE id="Table8" width="100%" align="center" border="1"><TR><TD width="20%">作者</TD><TD width="80%"><B><%# DataBinder.Eval(Container.DataItem,"title")%></B><asp:Label id=Label3 runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"topicid")%>' Visible="False"></asp:Label></TD></TR><TR><TD width="20%"></TD><TD width="80%">日期<%# DataBinder.Eval(Container.DataItem,"addtime")%></TD></TR><TR><TD width="20%"></TD><TD width="80%"><%# DataBinder.Eval(Container.DataItem,"content")%><FONT face="宋体"></FONT></TD></TR><TR><TD width="20%"></TD><TD width="80%"><asp:Button id="Button1" runat="server" Text="Button" CommandName="first"></asp:Button></TD></TR></TABLE><uc1:ReplyUC id="ReplyUC1" runat="server"></uc1:ReplyUC></ItemTemplate><AlternatingItemTemplate><FONT face="宋体"></FONT></AlternatingItemTemplate></asp:datalist> 这是后台的private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 topicid = int.Parse(Request.Params["topicid"]); if (!IsPostBack) { Forum.Component.ForumDB myForum = new Forum.Component.ForumDB(); DataList1.DataSource = myForum.GetTopicDetail(topicid); DataList1.DataBind(); } } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.DataList1.ItemCommand += new System.Web.UI.WebControls.DataListCommandEventHandler(this.DataList1_ItemCommand); this.DataList1.ItemDataBound += new System.Web.UI.WebControls.DataListItemEventHandler(this.DataList1_ItemDataBound); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void DataList1_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e) { switch(e.CommandName) { case "first": Label myLabel = (Label)e.Item.FindControl("Label2"); int replyid = int.Parse(myLabel.Text); Response.Write(replyid); Response.End(); break; } } private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e) { if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem) { Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1"); if(myReply!=null) { myReply.mytopicid = topicid; } } } 你在aspx页面上有没有用 <%@Register TagPrefix="uc1" TagName="ReplyUC" src="replyuc.ascx"%>这样的方法注册过这个用户控件?如果注册过,那么不设置别的属性时这个用户控件能否正常显示? 从你的代码中看不出有什么问题,其实有一个更简单的办法可以实现你要求的功能,那就是直接在你的用户控件中把mytopicid的值设为 int.Parse(Request.Params["topicid"]);,而不用把它设成一个公共属性,在包含页上再赋值。 在调用页面上你什么都不用写,就象现在的<uc1:ReplyUC id="ReplyUC1" runat="server"></uc1:ReplyUC>就行,值得说明一点是,在用int.Parse()方法转换 Request.Params["topicid"]的值时,必须做严格的验证,否则如果它是空值或不是一个可以转换为int的字符串,那会出错。 谢谢 webdiyer(陕北吴旗娃)谢谢您教我换一种思路做,这个问题我昨天做了一天加一晚上,也没想到换一种思路.再次说声谢谢了. checkboxlist复选框与文字不对齐 asp.net如何实现发邮件的功能 关于登陆时的校验码 ◆在 GridView 中添加新列 怎么都 在 右边, 能不能在 中间 或者在 左边? 怎么实现 ? 淘宝返利是如何实现的? 想自己写个C#的在线HTML编辑器 请教高手!满急的。 高分征集域名一个! 请能提供自定义数据绑定服务器控件的源码及教程。 ★★★关于开发访问量很大的网站需要注意哪些问题/??? 下面这条查询语句是什么意思啊 树型控件高分求救···
1:先将用户控件拖到你的目标网页
2:查看HTML代码,找到定义你的用户控件的标签,比如你的叫:
<uc1:ReplyUC id="ReplyUC1" ...
在你的服务端定义如下
protected ReplyUC ReplyUC1;3:然后,直接对ReplyUC1进行使用
{
Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");
myReply.mytopicid = topicid;
}错误还是为未将对象引用设置到对象的实例。
{
Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");
myReply.mytopicid = topicid;
}这样写也还是"错误还是为未将对象引用设置到对象的实例"帮帮帮忙啊,各位大侠,谢谢了
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");
if(myReply!=null)
myReply.mytopicid = topicid;
}
}
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.StackOverflowException: 发生类型为 System.StackOverflowException 的异常。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪:
[StackOverflowException: 发生类型为 System.StackOverflowException 的异常。]
<HeaderTemplate>
<FONT face="宋体">
<TABLE id="Table2" width="100%" align="center" border="1">
<TR>
<TD width="20%"> 作者</TD>
<TD width="79%"><B>问题
<asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"topic")%>'>Label</asp:Label></B></TD>
</TR>
</TABLE>
</FONT>
</HeaderTemplate>
<ItemTemplate>
<TABLE id="Table8" width="100%" align="center" border="1">
<TR>
<TD width="20%">作者</TD>
<TD width="80%"><B><%# DataBinder.Eval(Container.DataItem,"title")%></B>
<asp:Label id=Label3 runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"topicid")%>' Visible="False">
</asp:Label></TD>
</TR>
<TR>
<TD width="20%"></TD>
<TD width="80%">日期<%# DataBinder.Eval(Container.DataItem,"addtime")%></TD>
</TR>
<TR>
<TD width="20%"></TD>
<TD width="80%"><%# DataBinder.Eval(Container.DataItem,"content")%><FONT face="宋体"></FONT></TD>
</TR>
<TR>
<TD width="20%"></TD>
<TD width="80%">
<asp:Button id="Button1" runat="server" Text="Button" CommandName="first"></asp:Button></TD>
</TR>
</TABLE>
<uc1:ReplyUC id="ReplyUC1" runat="server"></uc1:ReplyUC>
</ItemTemplate>
<AlternatingItemTemplate>
<FONT face="宋体"></FONT>
</AlternatingItemTemplate>
</asp:datalist>
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
topicid = int.Parse(Request.Params["topicid"]);
if (!IsPostBack)
{
Forum.Component.ForumDB myForum = new Forum.Component.ForumDB();
DataList1.DataSource = myForum.GetTopicDetail(topicid);
DataList1.DataBind();
}
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataList1.ItemCommand += new System.Web.UI.WebControls.DataListCommandEventHandler(this.DataList1_ItemCommand);
this.DataList1.ItemDataBound += new System.Web.UI.WebControls.DataListItemEventHandler(this.DataList1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void DataList1_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
switch(e.CommandName)
{
case "first":
Label myLabel = (Label)e.Item.FindControl("Label2");
int replyid = int.Parse(myLabel.Text);
Response.Write(replyid);
Response.End();
break;
}
}
private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");
if(myReply!=null)
{
myReply.mytopicid = topicid;
}
} }
谢谢您教我换一种思路做,这个问题我昨天做了一天加一晚上,也没想到换一种思路.
再次说声谢谢了.