如何创建一个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
。还是我误解了你的评论?