gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:01 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的 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";

但我读过的任何内容都表明这是必需的步骤,所以我不相信这是正确的。

最佳答案

您需要将浏览器元素的 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>

关于c# - ASP.NET 自定义控件适配器未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33551179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com