2015-11-05 54 views
2

我想寫一個簡單的ControlAdapter下面是一個非常簡化的情況,但我似乎仍然無法讓它工作。在我簡化的情況下,我只想在呈現控件之前寫出一些內容。ASP.NET自定義控件適配器沒有射擊

我定義我的控制適配器作爲這樣的:

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> 

這是我的理解,應該是足夠的,並且框架應拿起了適配器,但它實際上似乎從未開火。

有關我可能會丟失什麼的任何建議?

更新

我可以,如果我programmaticaly上Page_Init添加適配器像這樣

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

但沒有什麼我已閱讀顯示這是一個必要的步驟,所以我得到它的工作不相信這是正確的。

+0

你有沒有根據標記的答案得到這個工作?我無法得到這個工作與所有的排列 - refID不起作用,也沒有上面的程序化方法爲你工作。 –

+0

我做了,但我需要一些額外的信息,我從我的後續問題收到這裏http://stackoverflow.com/questions/33556746/render-control-in-controladapter 它的要點是從ControlAdapter VS WebControlAdapter –

+0

謝謝。我面臨的問題是我沒有得到intellisense中的覆蓋建議。然後我重寫渲染方法,並開始工作。如果有人幫助,我會發布工作代碼。 –

回答

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>