C# 控件没有';是否在设计模式(设计时间)下显示?
我对特定用户控件有以下问题: 它在(C# 控件没有';是否在设计模式(设计时间)下显示?,c#,asp.net,visual-studio-2008,user-controls,C#,Asp.net,Visual Studio 2008,User Controls,我对特定用户控件有以下问题: 它在(设计视图)中显示为白色,并且根本不显示任何控件。(设计时间) 但消息来源: <%@ Control Language="C#" AutoEventWireup="True" CodeBehind="Follow_New.ascx.cs" Inherits="DFUI.UserControls.Follow_New" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="Aja
设计视图
)中显示为白色,并且根本不显示任何控件。(设计时间
)
但消息来源:
<%@ Control Language="C#" AutoEventWireup="True" CodeBehind="Follow_New.ascx.cs"
Inherits="DFUI.UserControls.Follow_New" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Assembly="MattBerseth.WebControls" Namespace="MattBerseth.WebControls"
TagPrefix="mb" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
.
.
.
.
.
.
.
.
.
.
如何在“设计”视图中显示所有要编辑的控件而不受源代码视图的影响,问题是什么?一种确保控件在“设计”视图中“可见”的方法,可以如下所示覆盖渲染:
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (this.DesignMode)
{
//render control for designer...
writer.Write(string.Format("<div>{0}</div>", this.ID));
}
else
{
//render actual control in runtime...
base.Render(writer);
}
}
<cc1:TabContainer ID="TabContainer1" runat="server">
<Tabs>
<cc1:TabItem ID="TabFirst" />
<cc1:TabItem ID="TabSecond" />
</Tabs>
</cc1:TabContainer>
protected override void Render(System.Web.UI.HtmlTextWriter)
{
如果(此.DesignMode)
{
//设计器的渲染控件。。。
Write(string.Format(“{0}”,this.ID));
}
其他的
{
//在运行时呈现实际控件。。。
base.Render(writer);
}
}
要在设计器中启用控件编辑,您应该从InAdminContainer继承,下面是一个简单的演示:
[ToolboxData("<{0}:TabContainer runat=server></{0}:TabContainer>")]
[ParseChildren(ChildrenAsProperties = false)]
[PersistChildren(true)]
public class TabContainer : Panel, INamingContainer
{
List<TabItem> tabs = new List<TabItem>();
[Browsable(true)]
[PersistenceMode(PersistenceMode.InnerProperty)]
public List<TabItem> Tabs
{
get { return this.tabs; }
}
}
public class TabItem : Panel, IPostBackEventHandler
{
public event EventHandler Click;
}
[ToolboxData(“”)
[解析子对象(childrenaproperties=false)]
[儿童(对)]
公共类选项卡容器:面板,InAdminContainer
{
列表选项卡=新建列表();
[可浏览(正确)]
[PersistenceMode(PersistenceMode.InnerProperty)]
公共列表选项卡
{
获取{返回this.tabs;}
}
}
公共类选项卡项:面板,IPostBackEventHandler
{
公共事件事件处理程序单击;
}
因此,“设计”视图将如下所示:
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (this.DesignMode)
{
//render control for designer...
writer.Write(string.Format("<div>{0}</div>", this.ID));
}
else
{
//render actual control in runtime...
base.Render(writer);
}
}
<cc1:TabContainer ID="TabContainer1" runat="server">
<Tabs>
<cc1:TabItem ID="TabFirst" />
<cc1:TabItem ID="TabSecond" />
</Tabs>
</cc1:TabContainer>
希望这有帮助 是否检查了“设计视图”是否已打开?转到选项>显示所有设置>滚动到HTML设计器>选择启用HTML设计器(需要重新启动VS)
另一个原因可能是HTML被破坏,打开ASCX(而不是代码隐藏),然后按CTRL+K,然后按CTRL+D。如果您试图让控件显示在工具箱中,则可能需要手动将引用的DLL添加到工具箱中。在工具箱中单击鼠标右键,然后浏览到要引用的DLL的位置,并选择所需的DLL。这将使任何正确标记的控件(以@gregor primar描述的方式标记)显示在工具箱中 您能否显示实际添加控件的位置?你在这里展示的就是注册它们。这实际上不会渲染任何东西?你提到的更新面板在哪里?离开你粘贴在这里的代码,它在设计模式下确实应该显示为白色,因为你的UserControl中没有可见的UI元素。是的,注册后,我的更新面板中有许多控件。