如何创建一个ASP.NET2.0Web控件,该控件可以接受HTML作为开始标记和结束标记之间的字符串(用于属性)?

如何创建一个ASP.NET2.0Web控件,该控件可以接受HTML作为开始标记和结束标记之间的字符串(用于属性)?,asp.net,.net-2.0,custom-controls,Asp.net,.net 2.0,Custom Controls,基本上,我希望能够有一个自定义控件: public class MyControl : WebControl { private string html; public string Html { get { return html; } set { html = value; } } } 然后在ASPX页面中按如下方式使用: <tag:MyControl runat="server"> <

基本上,我希望能够有一个自定义控件:

public class MyControl : WebControl
{
     private string html;

     public string Html
     { 
         get { return html; }
         set { html = value; }
     }
}
然后在ASPX页面中按如下方式使用:

<tag:MyControl runat="server">
    <div>
        <span>Some Text</span>
        <button>Do Something</button>
    </div>
</tag:MyControl>

一些文本
做点什么
然后标记:MyControl start和close标记中的HTML被放入控件的HTML属性中


这可能吗?我肯定是的,我只是对自定义ASP.Net控件没有太多经验。

您可以创建一个文字控件(以编程方式)并将其添加到自定义控件的控件集合中。然后从Html属性设置文本的文本属性:

创建文字(例如,在OnInit中):

Html属性:

public string Html
{ 
     get { return _literal.Text; }
     set { _literal.Text = value; }
}

您可以(以编程方式)创建文字控件并将其添加到自定义控件的控件集合中。然后从Html属性设置文本的文本属性:

创建文字(例如,在OnInit中):

Html属性:

public string Html
{ 
     get { return _literal.Text; }
     set { _literal.Text = value; }
}

我想你会想看看模板控件。有关示例,请参见和


(我将删除我的另一个答案,因为我似乎没有抓住要点)。

我想你会想看看模板控件。有关示例,请参见和


(我将删除我的另一个答案,因为我似乎没有抓住要点)。

你可以按照这条思路做些事情

public class TestControl : WebControl
{
    public ITemplate Html { get; set; }
    protected override void Render(HtmlTextWriter writer)
    {
        var stringWriter = new StringWriter();
        var htmlWriter = new HtmlTextWriter(stringWriter);
        var control = new Control();
        Html.InstantiateIn(control);
        control.RenderControl(htmlWriter);

        // now you can use the text as you want
        var htmlString = stringWriter.GetStringBuilder().ToString();

        base.Render(writer); // comment out to not render
    }
}
然后在html端,它看起来是这样的

<app:TestControl runat="server">
    <html>
        <strong>hi there...</strong>
    </html>
</app:TestControl>

你好…

您可以按照这一思路做一些事情

public class TestControl : WebControl
{
    public ITemplate Html { get; set; }
    protected override void Render(HtmlTextWriter writer)
    {
        var stringWriter = new StringWriter();
        var htmlWriter = new HtmlTextWriter(stringWriter);
        var control = new Control();
        Html.InstantiateIn(control);
        control.RenderControl(htmlWriter);

        // now you can use the text as you want
        var htmlString = stringWriter.GetStringBuilder().ToString();

        base.Render(writer); // comment out to not render
    }
}
然后在html端,它看起来是这样的

<app:TestControl runat="server">
    <html>
        <strong>hi there...</strong>
    </html>
</app:TestControl>

你好…

最简单的方法是简单地使用已有的:

<asp:Literal runat="server" ID="myHtmlControl">
    <div>
        <span>Some Text</span>
        <button>Do Something</button>
    </div>
</asp:Literal>

最简单的方法是简单地使用已经存在的内容:

<asp:Literal runat="server" ID="myHtmlControl">
    <div>
        <span>Some Text</span>
        <button>Do Something</button>
    </div>
</asp:Literal>

我不是在创建UserControl,而是在创建自定义WebControl。然后以编程方式创建Literal控件,并将其添加到自定义控件中。无论如何,这都不能回答问题。我想知道如何从aspx代码中获取HTML到HTML属性。。。不是以编程方式将其显示在屏幕上。我不是在创建UserControl,而是在创建自定义WebControl。然后以编程方式创建文本控件,并将其添加到自定义控件中。无论如何,这都不能回答问题。我想知道如何从aspx代码中获取HTML到HTML属性。。。没有通过程序把它放到屏幕上。哇,这比我想象的要多得多。我希望ASP.Net支持将控件的内容放入字符串中。。。哇,这比我想象的要多得多。我希望ASP.Net支持将控件的内容放入字符串中。。。这正是我读了马丁的答案后想要做的。这很有效。谢谢。您可能需要修改控件对象的一些设置。不确定内容是否将添加到此处的viewstate,但如果是,您可能希望禁用该选项。自动创建clientid也是如此。也许可以创建一个从控件派生的自定义控件来删除这些内容,这样您只需修改html呈现。这正是我在阅读Martin的答案后想要做的。这很有效。谢谢。您可能需要修改控件对象的一些设置。不确定内容是否将添加到此处的viewstate,但如果是,您可能希望禁用该选项。自动创建clientid也是如此。也许创建一个从控件派生的自定义控件来删除这些东西,这样你得到的只是html呈现的问题。起初,我并不喜欢从类继承来基本上覆盖它的所有功能并使它完全不同。其他人怎么想?这是一个聪明的解决方案,注意这个示例实现并没有覆盖任何功能。它类似于
Literal
,但它的实现是它自己的:它直接继承自
WebControl
。或者我误解了你的评论?起初我认为我并不喜欢从一个类继承来基本上覆盖它的所有功能,使它完全不同。其他人怎么想?这是一个聪明的解决方案,注意这个示例实现并没有覆盖任何功能。它类似于
Literal
,但它的实现是它自己的:它直接继承自
WebControl
。还是我误解了你的评论?