Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ControlAdapter中的渲染控件_C#_Asp.net_Webforms - Fatal编程技术网

C# ControlAdapter中的渲染控件

C# ControlAdapter中的渲染控件,c#,asp.net,webforms,C#,Asp.net,Webforms,这是一些与我的帖子有关的东西,但不完全是。我终于能够启动我的控制适配器,但是我不能让它像我期望的那样工作 我希望使用控件适配器的全部原因是向系统控件(如RadioButton)添加额外的标记。我正在使用另一个预期的框架 如果我们假设一个RadioButton没有任何更改,它会呈现如下 <input id="MainContent_RadioButton1" type="radio" name="ctl00$MainContent$RadioButton1" value="RadioButt

这是一些与我的帖子有关的东西,但不完全是。我终于能够启动我的控制适配器,但是我不能让它像我期望的那样工作

我希望使用控件适配器的全部原因是向系统控件(如RadioButton)添加额外的标记。我正在使用另一个预期的框架

如果我们假设一个RadioButton没有任何更改,它会呈现如下

<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>");
    }
}