ASP.NET自定义控件适配器未触发

时间:2015-11-05 17:36:04

标签: c# asp.net webforms

我正在尝试编写一个简单的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
  • 下添加了一个default.browser文件

我的default.browsers看起来像

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

但我读过的内容并未将此视为必需步骤,因此我不相信这是正确的。

1 个答案:

答案 0 :(得分:1)

您需要将浏览器元素的id属性更改为 refID ,如下所示。 如果要在映射/标识特定浏览器时为其指定唯一名称,则使用id属性,并在将新功能(如控件适配器)与现有浏览器定义关联时使用refID。这正是你想要做的。

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