首先,我可以向您保證您的自定義HTMLTextWriter被正確調用,並且您在配置中沒有任何錯誤。
使用你的web.config部分,我寫了一個測試程序,幷包含在var cap = ...
線下面的斷點:
protected void UpdatePanel1_Load(object sender, EventArgs e)
{
var cap = Request.Browser.TagWriter;
}
在兩個初始HTTP GET和AJAX回傳,斷點被擊中,並我可以看到正在使用的TagWriter實際上是CustomHtmlTextWriter。另外,我可以在CustomHtmlTextWriter構造函數上設置一個斷點,並在回發時觸發此斷點。
我還確認,即使您在回發中添加了全新的控件,即使調用了CustomHtmlTextWriter構造函數,OnTagRender,OnAttributeRender和其他事件也不會觸發。
此外,RenderBefore ...()和RenderAfter ...()方法不會被調用。
所以這回答你的問題「我在配置中做了什麼錯誤?」:不,你不是。您的自定義HtmlTextWriter被實例化並被引用,但沒有調用其有用的方法(調用BeginRender,但是通常不會使用您通常用來更改標記的方法)。
在這一點上,值得注意的是,browserCaps標記在.NET 2.0中已被棄用,因此您的用例似乎不被支持也許並不奇怪。根據你想要做什麼,我認爲ControlAdapter體系結構應該完成工作。
例如,我們假設我想用僅包含其ID的span來替換所有TextBoxes和Labels,並且在初始GET和AJAX回發上進行此項工作。當然你的例子會更復雜,但希望這種簡化會給你這個想法。
所有我需要做的是建立一個的ControlAdapter可以在任何網絡控制法:
public class CustomControlAdapter : WebControlAdapter
{
protected override void RenderBeginTag(HtmlTextWriter writer)
{
writer.WriteLine();
writer.WriteBeginTag("span");
writer.Write(HtmlTextWriter.TagRightChar);
}
protected override void RenderEndTag(HtmlTextWriter writer)
{
writer.WriteEndTag("/span");
writer.WriteLine();
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.WriteLine(Control.ID);
}
}
然後,我線它到多種控制我感興趣的工作的。我這樣做,通過創建在App_Browsers文件文件夾中的文件Adapters.browser,幷包括以下配置:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter
controlType="System.Web.UI.WebControls.Label"
adapterType="WebApplication1.CustomControlAdapter"
/>
<adapter
controlType="System.Web.UI.WebControls.TextBox"
adapterType="WebApplication1.CustomControlAdapter"
/>
</controlAdapters>
</browser>
</browsers>
請注意,我的瀏覽器的「默認」 REFID將會對所有的瀏覽器這項工作。現在,當需要呈現Label或TextBox Web控件時,CustomControlAdapter將負責處理它。上面的代碼在我的示例應用程序中進行了測試,並且即使使用AJAX也能完美運行。在你的情況下,我想你只需要添加幾個控制類型到適配器。瀏覽器文件,你應該是100%的業務。
如果browserCaps標記已被棄用,是否有其他配置自定義HtmlTextWriter的方法?如果沒有,ControlAdapter體系結構可能是我解決問題的一種可行方法。謝謝你的幫助。 –
我在這上面花了大約4-5個小時 - 我真的瞭解它 - 而且我無法讓自定義的HtmlTextWriter工作。我在AJAX調用中反映了很多堆棧,出於某種原因,它根本不會在AJAX上調用這些事件,但我無法弄清楚原因。儘管我發現原因,但似乎很難有任何可以做到的事情。這看起來好像他們現在正在推進ControlAdapter體系結構。 –