【发布时间】:2015-05-27 15:22:04
【问题描述】:
如何让我的控件在其标签中包含文本?
<uc:My runat="server">Text</uc:My>
我的控件包含一个复杂的表格,我想将文本放入其中一个单元格。该怎么做?
【问题讨论】:
标签: c# .net asp.net user-controls
如何让我的控件在其标签中包含文本?
<uc:My runat="server">Text</uc:My>
我的控件包含一个复杂的表格,我想将文本放入其中一个单元格。该怎么做?
【问题讨论】:
标签: c# .net asp.net user-controls
[PersistChildren(false)]
[ParseChildren(true, "Text")]
public partial class RequiredFieldMarker : UserControl, ITextControl
{
[Category("Settings")]
[PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]
public string Text
{
get
{
return lblName.Text;
}
set
{
lblName.Text = value;
}
}
}
【讨论】:
在您的用户控件上有一个名为Text 的属性,并将其设置为类似
<uc:My id="my" Text="some text" runat="server">Text</uc:My>
或服务器端
my.Text = "some text";
【讨论】:
假设UC生成一个表,我能想到的最简单的方法是这样的:
在 UserControl 的 ascx 中执行如下操作:
<table>
<tr>
....
<td><asp:Literal runat="server" ID="ltCellContent" /></td>
....
</tr>
</table>
在UserControl的代码后面:
public string CellContent
{
get { return ltCellContent.Text; }
set { ltCellContent.Text = value; } }
}
并使用它:
<uc:My runat="server" CellContent="Some content" />
【讨论】:
只需在类前添加一行 ([ParseChildren(true, "TestInnerText")]),并添加一个名为“TestInnerText”的属性。创建您选择的任何控件,我创建 LiteralControl 只是为了显示内部 html 视图。
“TestInnerText” - 只是我给的一个临时名称,您可以使用您选择的任何属性名称。
在 my.aspx.cs 文件中进行以下更改,
[ParseChildren(true, "TestInnerText")]
public partial class My : UserControl
{
public string TestInnerText
{
set
{
LiteralControl lc = new LiteralControl();
lc.Text = value;
this.Controls.Add(lc);
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
【讨论】: