简体   繁体   English

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

[英]ASP.NET Custom Control Adapter not firing

I am trying to write a simple ControlAdapter below is a very simplified case, but I still can't seem to get it to work.我正在尝试编写一个简单的 ControlAdapter 下面是一个非常简化的案例,但我似乎仍然无法让它工作。 In my simplified case I just want to write something out before my control is rendered.在我的简化案例中,我只想在呈现控件之前写出一些东西。

I defined my control adapter as such:我这样定义了我的控制适配器:

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);
    }
  }
}
  • I then added an App_Browsers folder under my Test.Web project.然后我在我的 Test.Web 项目下添加了一个 App_Browsers 文件夹。
  • I then added a default.browser file under App_Browsers然后我在 App_Browsers 下添加了一个 default.browser 文件

And my default.browsers looks like我的 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>

It is my understanding that should be enough, and the framework should pick up the the adapter, however it never actually seems to fire.我的理解应该足够了,框架应该拿起适配器,但它实际上似乎从未触发过。

Any suggestions about what I could be missing?关于我可能缺少什么的任何建议?

Update更新

I am able get it to work if I programmaticaly add the adapter on Page_Init like so如果我像这样以编程方式在 Page_Init 上添加适配器,我就能让它工作

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

But nothing I have read show this as a required step, so I am not convinced this is correct.但是我读过的任何内容都没有显示这是必需的步骤,所以我不相信这是正确的。

You need to change the id attribute of the browser element to refID as follows.您需要将浏览器元素的 id 属性更改为refID ,如下所示。 The id attribute is used if you would like to give it a unique name, when mapping/identifying a particular browser, and refID is used when associating new capabilities (such as Control Adapters) with an existing browser definition.如果您想在映射/识别特定浏览器时为其赋予唯一名称,则使用 id 属性,在将新功能(例如控制适配器)与现有浏览器定义相关联时使用 refID。 And that's exactly what you want to do.而这正是您想要做的。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM