ASP.NET自定义控制适配器未启动

本文关键字:启动 适配器 控制 NET 自定义 ASP | 更新日期: 2023-09-27 18:20:48

我正在尝试编写一个简单的ControlAdapter。下面是一个非常简单的例子,但我似乎仍然无法使其工作。在我的简化情况下,我只想在呈现控件之前写出一些内容。

我将我的控制适配器定义为:

using System.Web.UI;
using System.Web.UI.WebControls.Adapters;
namespace Test.Web.Common.Controls.ControlAdapters {
  public class RadioBtnStyleAdapter : WebControlAdapter {

    protected override void BeginRender(HtmlTextWriter writer) {
      writer.WriteLine("<!--- CONTROL ADAPTER -->");
      writer.WriteLine("<div><b>TEST</b></div");
      base.BeginRender(writer);
    }
  }
}
  • 然后,我在Test.Web项目下添加了一个App_Browsers文件夹
  • 然后,我在App_Browsers下添加了一个默认的.browser文件

我的默认浏览器看起来像

<browsers>
  <browser id="Default">
    <controlAdapters>
      <adapter controlType="System.Web.UI.WebControls.RadioButton" adapterType="Test.Web.Common.Controls.ControlAdapters.RadioBtnStyleAdapter"></adapter>
    </controlAdapters>
  </browser>
</browsers>

我的理解应该足够了,框架应该拿起适配器,但它似乎从来没有真正启动过。

关于我可能缺少的东西,有什么建议吗?

更新

如果我像一样在Page_Init上编程添加适配器,我就能让它工作

HttpContext.Current.Request.Browser.Adapters["System.Web.UI.WebControls.RadioButton"] = "Test.Web.Common.Controls.ControlAdapters.RadioBtnStyleAdapter";

但我读过的任何东西都没有表明这是一个必要的步骤,所以我不相信这是正确的。

ASP.NET自定义控制适配器未启动

您需要将浏览器元素的id属性更改为refID,如下所示。如果您想在映射/标识特定浏览器时给它一个唯一的名称,就会使用id属性,而refID则在将新功能(如Control Adapters)与现有浏览器定义关联时使用。这正是你想要做的。

<browsers>
  <browser refID="Default">
    <controlAdapters>
      <adapter controlType="System.Web.UI.WebControls.RadioButton" adapterType="Test.Web.Common.Controls.ControlAdapters.RadioBtnStyleAdapter"></adapter>
    </controlAdapters>
  </browser>
</browsers>