C# ControlAdapter中的渲染控件
这是一些与我的帖子有关的东西,但不完全是。我终于能够启动我的控制适配器,但是我不能让它像我期望的那样工作 我希望使用控件适配器的全部原因是向系统控件(如RadioButton)添加额外的标记。我正在使用另一个预期的框架 如果我们假设一个RadioButton没有任何更改,它会呈现如下C# ControlAdapter中的渲染控件,c#,asp.net,webforms,C#,Asp.net,Webforms,这是一些与我的帖子有关的东西,但不完全是。我终于能够启动我的控制适配器,但是我不能让它像我期望的那样工作 我希望使用控件适配器的全部原因是向系统控件(如RadioButton)添加额外的标记。我正在使用另一个预期的框架 如果我们假设一个RadioButton没有任何更改,它会呈现如下 <input id="MainContent_RadioButton1" type="radio" name="ctl00$MainContent$RadioButton1" value="RadioButt
<input id="MainContent_RadioButton1" type="radio" name="ctl00$MainContent$RadioButton1" value="RadioButton1" /><label for="MainContent_RadioButton1">My Radio Button</label>
我的控制适配器看起来像
public class RadioButtonAdapter : WebControlAdapter {
public new RadioButton Control => (RadioButton) base.Control;
#region Overrides of WebControlAdapter
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
#endregion
}
}
无适配器
如果不使用控制适配器,我的单选按钮显然效果良好
适配器
添加我的控制适配器而不更改任何其他内容,我会出现意外行为:
我已尝试添加调用以使基本控件呈现,例如
RenderChildren(writer);
RenderContents(writer);
但我似乎永远也无法控制渲染的基础
最终,我想要的是:
protected override void Render(HtmlTextWriter writer)
{
writer.WriteBeginTag("div");
writer.AddAttribute("class", "wrapper");
//Render existing control
//Control.RenderControl();
writer.WriteEndTag("div");
}
我的问题是,这是否可能,如果可能的话,我是否做了一些明显错误的事情。如果您有任何建议或帮助,我们将不胜感激。您需要使用ControlAdapter类而不是WebControlAdapter,请参阅下文。 使用WebControlAdapter的问题在于,它通过调用RenderBeginTag、RenderContent和RenderTag来呈现控件。 但是,对于复选框,RenderContents不是生成内容的内容,而是Render方法。控件的Render方法在使用ControlAdapter类时执行
公共类RadioButtonAdapter:System.Web.UI.Adapters.ControlAdapter{
受保护的覆盖无效BeginRender(HtmlTextWriter编写器){
作者:写(“”);
贝金伦德(作家);
}
受保护的覆盖无效EndRender(HtmlTextWriter编写器){
base.EndRender(编写器);
作者:写(“”);
}
}
你搞定了。我刚测试过,效果很好。非常感谢你!很高兴我能帮上忙。
RenderChildren(writer);
RenderContents(writer);
protected override void Render(HtmlTextWriter writer)
{
writer.WriteBeginTag("div");
writer.AddAttribute("class", "wrapper");
//Render existing control
//Control.RenderControl();
writer.WriteEndTag("div");
}
public class RadioButtonAdapter : System.Web.UI.Adapters.ControlAdapter {
protected override void BeginRender(HtmlTextWriter writer) {
writer.Write("<div class=\"wrapper\">");
base.BeginRender(writer);
}
protected override void EndRender(HtmlTextWriter writer) {
base.EndRender(writer);
writer.Write("</div>");
}
}