用户控件的开始和结束标记之间不允许使用内容

Man*_*ish 13 .net c# asp.net user-controls

我想构建一个用户控件,假设MyDiv.ascx.这个控件呈现div标签,并在诸如添加少量属性之类的东西之后做更多代码,这在这里不是问题.问题是我希望用户控件的开始和结束标记之间的文本.例如:

文本与其他一些HTML标签一起使用.

因此,当做这样的事情时,我在运行网站时遇到了解析错误.此外,VS2008通过说" 元素 MyDiv 的开始和结束标签之间不允许内容 "来警告我.

  • 问题1:我可以做这样的事情,即用户控件的开始和结束标签之间的文本/标记吗?

  • 问题2:如果是,如何

Mar*_*art 17

建议的解决方案对我不起作用.我找到了以下解决方案:要么使用户控件继承Panel而不是仅仅UserControl,或者如果你有多个内容,就像我的情况一样,请将你的内容字段设为PlaceHolders而不是简单Controls.

[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);
    }
}
Run Code Online (Sandbox Code Playgroud)

phBodyContent并且phGripContentPlaceHolders.

这样我可以使用我的控件与ASPX中的任何内容:

<local:Drawer ID="ctlDrawer" runat="server">
    <BodyContent>
        <!--Insert any ASP content here-->
    </BodyContent>
    <GripContent>
        <!--Insert any ASP content here-->
    </GripContent>
</local:Drawer>
Run Code Online (Sandbox Code Playgroud)

  • 我在这里建议的另一个补充是在将新的PlaceHolder对象添加到phBodyContent之前也检查它们等等.当我指定一些BodyContent时,它对我来说很好,但如果我没有,则会出错. (2认同)

Jon*_*eet 14

我相信你只需要在控件中应用几个属性:

[ParseChildren(false)]
[PersistChildren(true)]
public class MyDiv : UserControl
{
    ...
Run Code Online (Sandbox Code Playgroud)

然后你可能需要覆盖AddedControl- 我不确定.

这样说 - 这是我用过的唯一用户控件的作用:)

  • 您可以将[ParseChildren(true,"Body")]与字符串类型为"Body"的属性一起使用.这将放置InnerHtml的内容并将其放入您在ParseChildren注释中命名为第二个参数的任何属性. (4认同)