关于 页面中使用多个 用户控件 的问题

老猿能饭 2004-03-30 10:50:13
我写了一个用户控件 CNavBar 控件有一些属性
使用<div id="Div_NavBar" runat="server"></div>展现我代码中实现的html内容
在test.aspx页面中拖入两个控件CNAV1,CNAV2
在test.aspx的.cs定义两个控件
protected CNavBar CNAV1;
protected CNavBar CNAV2;
在 Page_load()中初始化

运行发现生成的两个控件的ID都为
<div id="CNavBar_Div_NavBar">...</div>
按理应该是
<div id="CNAV1_Div_NavBar">...</div>
为何?
当 postback后系统就报错了ERR: 控件具有相同的ID findControl错误

怎么解决,请各位支持!!!
...全文
128 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
老猿能饭 2004-03-30
  • 打赏
  • 举报
回复
to gshope(北京.Net)
<%@ Register TagPrefix="uc1" TagName="CNavBar" Src="CNavBar.ascx" %>
我的操作是在.NET 2003IDE下操作的,不会有这个问题,我拖放其他控件是正常的,就这个控件,我想不出是什么问题
dulkernetbug 2004-03-30
  • 打赏
  • 举报
回复
前台注册,后台声明,关注一下
gshope 2004-03-30
  • 打赏
  • 举报
回复
我看一下你在aspx里是怎么注册用户控件的?
sportdog 2004-03-30
  • 打赏
  • 举报
回复
string id = this.UniqueID ;
Text.Attributes["id"] = id ;
gshope 2004-03-30
  • 打赏
  • 举报
回复
我的意思是说,在调用ascx的aspx中,应该是不能直接访问<div id="Div_NavBar" runat="server"></div>的!
老猿能饭 2004-03-30
  • 打赏
  • 举报
回复
我的test.ASPx里是拖放调用的,所以肯定正确
代码是这样的
<uc1:CNavBar id="CNAV1" runat="server"></uc1:CNavBar>
<uc1:CNavBar id="CNAV2" runat="server"></uc1:CNavBar>
然后在test.aspx.cs里声明了
protected CNavBar CNAV1;
protected CNavBar CNAV2;
再在
page_load()里初始化了
{
CNAV1.CStyle="default";
CNAV2.CStyle="model1";
CNAV1.NavBarItems = getnavItems("default");
CNAV1.NavBarItems = getnavItems("model1");
}
结构生成的ASPX页面的HTML源代码里边是这样的
<div id="CNavBar_Div_NavBar">...</div>
而不是我期望的
<div id="CNAV1_Div_NavBar">...</div>
为何???
老猿能饭 2004-03-30
  • 打赏
  • 举报
回复
呵呵,我的.ascx的代码是这样的
<%@ Control Language="c#" AutoEventWireup="true" Codebehind="CNavBar.ascx.cs" Inherits="NBVOD.CNavBar" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<div id="Div_NavBar" runat="server"></div>

CNavBar.ascx.cs 代码是这样
namespace test
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Collections ;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using VodObjects;
using System.Xml ;
/// <summary>
/// NavBar 的摘要说明。
/// </summary>
public class CNavBar : System.Web.UI.UserControl
{
#region 定义组件属性
protected HtmlGenericControl Div_NavBar;
private string _Style=null;
private ArrayList _NavBarItems=new ArrayList();
private string _Title = null;
public bool ISDouble = false;
public string CStyle
{
get
{
return _Style;
}
set
{
_Style = value;
}
}
public ArrayList NavBarItems
{
get
{
return _NavBarItems ;
}
set
{
_NavBarItems = value;
}
}

public string Title
{

get
{
return _Title;
}
set
{
_Title = value;
}
}

private ArrayList _SecBarItems=new ArrayList();
public ArrayList SecBarItems
{
get
{
return _SecBarItems;
}
set
{
_SecBarItems = value;
}

}
public int nav_MaxNum=8;
public int nav_secMaxNum = 10;

#endregion

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Div_NavBar.InnerHtml =DrawNav();
}
这样明白了吧
gshope 2004-03-30
  • 打赏
  • 举报
回复
<uc1:menu id="Menu1" runat="server"/>
gshope 2004-03-30
  • 打赏
  • 举报
回复
不对吧?用户控件是把控件封装在.ascx文件里面,在调用的aspx里不应该有<div id="Div_NavBar" runat="server"></div>的情况,应该是下面这样注册的:
<%@ Register TagPrefix="uc1" TagName="menu" Src="menu.ascx" %>
所以我觉得你设计的就不对!
老猿能饭 2004-03-30
  • 打赏
  • 举报
回复
自己已经找到原因了,我在InitializeComponent()中指定了ID所以。。。。
谢谢大家

62,243

社区成员

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

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

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

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