我想建立一个用户控件假设MyDiv.ascx。 此控件呈现div标签,做一些更多的代码背后的东西,比如增加一些属性等,这是不值得关注的问题在这里。 问题是我希望用户控件的开始和结束标记之间的文本。 例如:
文云在这里与其他一些HTML标签。
所以,做这样的事情时,我得到一个解析错误,运行网站时。 VS2008也说“ 内容是不允许元素 MyDiv 的开始和结束标记之间的 ”警告我。
问题1:我可以这样做的用户控件的开始和结束标记之间的这种即文本/标记?
问题2:如果是,如何
我想建立一个用户控件假设MyDiv.ascx。 此控件呈现div标签,做一些更多的代码背后的东西,比如增加一些属性等,这是不值得关注的问题在这里。 问题是我希望用户控件的开始和结束标记之间的文本。 例如:
文云在这里与其他一些HTML标签。
所以,做这样的事情时,我得到一个解析错误,运行网站时。 VS2008也说“ 内容是不允许元素 MyDiv 的开始和结束标记之间的 ”警告我。
问题1:我可以这样做的用户控件的开始和结束标记之间的这种即文本/标记?
问题2:如果是,如何
我相信,你只需要申请几个属性来控制的:
[ParseChildren(false)]
[PersistChildren(true)]
public class MyDiv : UserControl
{
...
然后,您可能需要重写AddedControl
-我不知道。
这么说吧 - 那是因为我曾经写过独一无二的用户控制什么作品:)
建议的解决方案并没有为我工作。 我发现了以下解决方案:要么让你的用户控件继承Panel
,而不是只有UserControl
,或者如果你有在我的情况下,一个以上的内容一样,让你的内容领域是PlaceHolder
s,而不是简单的Control
秒。
的[PersistenceMode(PersistenceMode.InnerProperty)]
被添加以避免XHTML验证警告。
public partial class DrawerControl : UserControl
{
[PersistenceMode(PersistenceMode.InnerProperty)]
public PlaceHolder BodyContent { get; set; }
[PersistenceMode(PersistenceMode.InnerProperty)]
public PlaceHolder GripContent { get; set; }
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
phBodyContent.Controls.Add(BodyContent);
phGripContent.Controls.Add(GripContent);
}
}
phBodyContent
和phGripContent
是PlaceHolder
秒。
这样我可以用我的控制装置与ASPX任何内容:
<local:Drawer ID="ctlDrawer" runat="server">
<BodyContent>
<!--Insert any ASP content here-->
</BodyContent>
<GripContent>
<!--Insert any ASP content here-->
</GripContent>
</local:Drawer>
我也想创建“innerHTML的”自定义控制。 这是我结束了(部分基于一些早期的答案/评论)...
div.ascx.cs:
[ParseChildren(true, "Text")] //Store inner content in Text property
public partial class div : System.Web.UI.UserControl
{
public string Text { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
litText.Text = Text; //Render it however you want
}
}
div.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="div.ascx.cs" Inherits="TestApp.Controls.div" %>
<div>
<asp:Literal ID="litText" runat="server" />
</div>
测试页:
<%@ register src="~/Controls/div.ascx" tagname="div" tagprefix="uc" %>
<uc:div ID="div1" runat="server">Test data</uc:div>
我发现这个在这里:
ASP.Net:与内容区域用户的控制,这是完全可能的,但我需要一些细节
工程就像一个魅力,但我希望我能surpress设计时间的消息,内容没有开始和结束标记之间允许的,但它的工作原理在运行时。
[ParseChildren(true, "Content")]
[PersistChildren(false)]
public partial class CollapsiblePanelControl : UserControl
{
private Control content;
// add the content
this.MainContent.Controls.Add(content);
// if this is not a post back
if (!this.IsPostBack)
{
// set to true;
this.Expanded = true;
}
}
该标记是这样的:
<asp:Panel ID="CollapsiblePanelMainPanel" runat="server" CssClass="collapsiblepanel">
<asp:Panel ID="CollapsibleHeaderPanel" runat="server" CssClass="collapsibleheaderpanel">
<asp:ImageButton ID="CollapseButton" ImageUrl="~/Images/BlueArrowDown.png" runat="server" OnClick="ExpandButton_Click" CssClass="expandbutton" />
<asp:Label ID="CollapsiblePanelHeaderLabel" runat="server" Text="Collapsed" CssClass="collapsiblelabel"></asp:Label>
</asp:Panel>
<asp:Panel ID="MainContent" runat="server">
</asp:Panel>
</asp:Panel>
然后在客户端:
<dc:CollapsiblePanelControl ID="CheckOnMePanel" runat="server" CssClass="checkonmepanel" EnableViewState="true"
CollapsedHeight="20px" ExpandedHeight="300px" Expanded="true" HeaderText="Check On Me Email Service" >
<Content>
...[Your Content Goes Here]
</Content>
</dc:CollapsiblePanelControl>
Text属性添加到您的控制,并在服务器,这将是开启和关闭的div之间的链接这段文字属性标签运行。
你可能要小心,如果你把内容区域的服务器控制...
你可能只是想控制从面板继承和覆盖您需要调整任何方法? 可能是更容易还是困难取决于你需要定制什么
public class MyDiv : Panel
{
}