我有一个asp.net UserControl,它将HTML内容从SharePoint列表写入Literal控件。目前,我在写入Literal的每个SharePoint列表项之前在h5标记中插入标题。我没有将标题硬编码放在h5标签中,而是希望公开我的用户控件的公共属性,让我可以定义标题的html格式。这与我发现的模板化用户控件问题有点不同,因为它不是用户控件的模板。我只需要一个包含html的字符串。这就是我要做的事情:
public class MyUserControl: UserControl
{
public string TitleFormat { get; set; }
private void ShowContent()
{
...
string output = String.Format(TitleFormat, title) + someContent;
ltlOutput.Text = output.
}
}
在标记中:
<UC:MyUserControl id="muc1" runat="server">
<TitleFormat>
<a href="www.somewhere.com"><h3>{0}</h3></a>
</TitleFormat>
</UC:MyUserControl>
我该如何设置?
答案 0 :(得分:2)
以下是答案(由Decker Dong在asp.net论坛中提供):
要将另一个类嵌套到一个类中,您必须声明一个新属性 只是声明它是一个InnerProperty。并设置其设计属性。 现在,这里有一个完整的样本:
[ParseChildren(true),PersistChildren(false)] public partial class MyUserControl : System.Web.UI.UserControl { [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [PersistenceMode(PersistenceMode.InnerProperty)] public string TitleFormat { get; set; } protected void Page_Load(object sender, EventArgs e) { } }
使用这些属性,您可以使用问题中所写的控件。
答案 1 :(得分:-1)
您需要的是http://msdn.microsoft.com/en-us/library/system.web.ui.itemplate.aspx
HTML
<test:NamingControl runat="server" ID="NamingControl" TitleFormat="This is myTitle">
<TitleFormatTemplate>
My title is <%# Container.TitleFormat %>
</TitleFormatTemplate>
</test:NamingControl>
用户控件
public partial class MyUserControl : System.Web.UI.UserControl
{
private ITemplate template;
protected void Page_Load(object sender, EventArgs e)
{
}
public string TitleFormat
{
get;
set;
}
[PersistenceMode(PersistenceMode.InnerProperty),
TemplateContainer(typeof(TitleFormatTemplate))]
public ITemplate TitleFormatTemplate
{
get { return template; }
set { template = value; }
}
protected override void CreateChildControls()
{
base.CreateChildControls();
TitleFormatTemplate t = new TitleFormatTemplate();
t.TitleFormat = this.TitleFormat;
template.InstantiateIn(t);
this.Controls.Add(t);
this.DataBind();
}
}
儿童控制 - INamingContainer
public class TitleFormatTemplate : Control, INamingContainer
{
private string _TitleFormat = "";
public string TitleFormat
{
get { return _TitleFormat; }
set { _TitleFormat = value; }
}
}
更简单的方法 - 不再有TitleFormat标记
MyUserControl.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyUserControl.ascx.cs"
Inherits="testgingweb.usrcontrols.MyUserControl" %>
<a href="www.somewhere.com"><h3><asp:Label runat="server" ID="PassedValueLabel"></asp:Label</h3></a>
Codebehind - MyUserControl.ascx.cs
public string TitleFormat
{
get { return ViewState["TitleFormat"]; }
set { ViewState["TitleFormat"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
PassedValueLabel.Text = String.Format("Whatever {0} here", this.TitleFormat);
}
HTML
<test:MyUserContorl runat="server" ID="NamingControl" TitleFormat="This is myTitle">
</test:MyUserContorl>
请注意,我不再拥有TitleFormat
标记了。