问题标签 [control-adapter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1451 浏览

asp.net - 如何构建 ImageButton 控件适配器(或者更一般地说,如何构建一个简单的控件适配器)?

这个问题的灵感来自于我border-width: 0px;在 ImageButton Web 控件上发现了非常烦人的默认样式 ( )。简单的解决方案是通过将您自己的样式添加到控件来覆盖它,例如Style="border-width: 2px;".

无论如何,如果只是制作一个简单的控件适配器,它会在正确的位置介入并告诉控件不要呈现默认样式,那就太好了。

在查看了来自 CSSFriendly ControlAdapter 项目的代码之后,似乎他们正在重新创建大部分渲染,这对于我想要做的事情来说太过分了——即只需更改渲染出来的默认样式。

那么问题来了,如何只通过控制适配器修改默认样式的渲染,其余的保持原样?

甚至可能吗?

谢谢,埃吉尔。

0 投票
1 回答
191 浏览

asp.net - 如果不为特定浏览器呈现,为什么要使用适配器而不是扩展 ASP.Net 控件?

我对控制适配器的理解是,它们旨在为不同的浏览器提供不同的 HTML 呈现(因此,您在 .browsers 文件中注册它们......)。

但是,似乎人们只是为默认浏览器注册适配器,并使用它们来覆盖 ASP.Net 控件的 Render 方法。

你相信这是真的吗?如果是这样,您为什么不直接从控件继承并以这种方式覆盖 Render 方法,而不是使用适配器?

覆盖的一个好处是您可以向其添加更多属性,这是适配器无法做到的。

我只是想确保我不会错过一些使适配器比覆盖更好的秘诀。

0 投票
1 回答
2680 浏览

c# - C#.Net - RadioButton 控制适配器和回发

我有一个单选按钮控件适配器,它尝试将带有 CSS 类的单选按钮控件呈现为输入标记的一部分,而不是作为周围的跨度。

目前,这非常接近我想要的,唯一的区别是组名属性(标准单选按钮使用内部值 UniqueGroupName,而我只使用 GroupName。我似乎找不到获取 UniqueGroupName 的方法,无论如何,下面的行都应该解决这个问题:

带有标准单选按钮的旧 HTML -

新渲染——

问题是回发不起作用 - RadioButton1.Checked 值始终为假。关于如何在回发中获取单选按钮的值的任何想法?

0 投票
1 回答
368 浏览

asp.net - 为什么默认的控制适配器映射在 Chrome 或 Safari 上不起作用?

我已确认我的控制适配器未在 Chrome 和 Safari 中触发。我已经调试过,当适配器在 Firefox/IE 中完美工作时,适配器内的断点不会在 Chrome/Safari 中被击中。因此,对于 Chrome/Safari,IIS 只是忽略了映射。

我的 AdapterMappings.browser 文件如下所示:

这应该为所有浏览器提供映射,对吗?

我使用 Charles 代理检查发送了哪些用户代理。他们是:

知道为什么会这样吗?我读过的所有内容都告诉我我的浏览器映射是正确的?而且,正如我所说,这适用于 IE/Firefox,所以我知道我的配置在技术上是正确的。

0 投票
1 回答
276 浏览

asp.net - 是否有一些正式的方法来更新 ASP.Net 的浏览器检测文件?

我有一个使用控制适配器的 ASP.Net 站点。我们将适配器映射到“默认”的“refID”。

这些适配器在除Chrome 和 Safari之外的所有浏览器上都能正常工作。对于那些浏览器,它们不会执行。我已经放弃试图找出原因——我在这里有一个关于 SO 的问题,没有人能够回答,而且我已经研究了好几天了。简直莫名其妙。

我已经在本地环境中测试了相同的代码,它工作得很好。此外,没有其他人可以在其他服务器上复制我的问题。它似乎以某种方式仅限于我客户站点的机器。它们会以某种方式过时吗?

如果是这种情况,是否有某种方法可以“更新” .browser 文件?我很想将 .browser 文件从我的机器上的 Framework 目录中复制到他们的机器上,但我很好奇还有比这更正式的东西吗?除了这些文件之外,ASP.Net 是否还有其他用于浏览器检测的数据源?

0 投票
1 回答
1568 浏览

asp.net - 在 ASP.NET 2.0 中,如何从呈现的页面/控件输出中删除额外的制表符和换行符?

我一直在研究这个。我发现了几个关于这个主题的资源,它们都倾向于使用相同的方法 - 覆盖 Page.Render,使用 HtmlTextWriter 将输出转换为字符串,然后使用一系列编译的正则表达式来删除额外的空格。这是一个例子

嗯,我试过了,它的工作原理......但是......

在 Safari 5.0 中,这似乎会导致加载图像时出现各种性能问题并出现“服务器太忙”错误。IE 7、FireFox 3.6 和 Google Chrome 6.0 似乎工作正常,但我没有对服务器进行太多压力测试。有时页面生成的时间似乎有滞后,但是一旦将html发送到浏览器,页面就会快速显示。

无论如何,当您考虑它时,让 .NET 构建所有这些选项卡和换行符只是为了再次使用字符串解析将它们全部删除似乎相当愚蠢 - 删除它们的效率最低的方法。覆盖 HtmlTextWriter 并将其传递到主页请求上的树中会更有意义,以避免将它们放入输出中 - 从逻辑上讲,在这种情况下应该有性能提升而不是命中。

即使我只能使用这种方法删除 50% 的空白,它仍然会为正则表达式留下更少的工作——这意味着它应该比单独使用正则表达式时表现得更好。

我尝试使用控制适配器并覆盖几个成员

  1. 将对 WriteLine() 的所有调用定向到相应的 Write() 方法
  2. 将 NewLine 属性设置为空字符串
  3. 覆盖 OutputTabs() 方法并简单地删除代码
  4. 覆盖 Indent 属性并返回 0

我还尝试覆盖 RenderChildren、Render、BeginRender 和 EndRender 以传入我的自定义 HtmlTextWriter,但我似乎无法让一个简单的标签控件删除其标签之前的选项卡。我还使用 Reflector 对框架进行了深入研究,但我根本无法弄清楚这些字符是如何生成的——我以为我使用的是“包罗万象”的方法,但显然我遗漏了一些东西。

无论如何,这就是我想出的。此代码未按我希望的方式运行。当然,我也尝试过直接覆盖页面上的各种 Render 方法并传入我的自定义 HtmlTextWriter 的实例,但这也不起作用。

如果您不熟悉控制适配器,只需将下面的 xml 放在 ASP.NET App_Browsers 文件夹中的 .browser 文件中。您可以更改 controlType 以将控制适配器应用于标签或其他东西,以实现较小范围的测试。如果我能做到这一点,如果有必要在我的项目中添加所有控件并不是什么大不了的事。

无论如何,您会认为只有一个简单的配置设置,例如 VerboseHtml="false" 或 PreserveHtmlFormatting="false" 或类似的东西。如果您查看 MSN.com 的输出,他们正在使用与此类似的某种压缩……而且它似乎非常高效。

0 投票
1 回答
2737 浏览

asp.net - CSS 友好适配器停止工作

我在一个成功运行了几年的站点上使用了 Css Friendly Adapters,在进行了一些更改后,适配器默默地失败了——但只在服务器上。在我的本地副本上,它仍然可以正常工作。在服务器上,我的 treeview html 呈现为一堆乱七八糟的表格,而不是像以前那样的无序列表。我已经麻烦地将一些错误记录插入到 Css 友好适配器的源代码中,据我所知,CSSFriendly.dll 根本没有被调用,但是如果我删除 dll,应用程序不会编译。

我的 CSSFriendlyAdapters.browser 文件如下:

有人对可能导致此问题的原因有任何想法吗?我不知所措。谢谢。

0 投票
0 回答
748 浏览

c# - 自定义表单控件适配器未触发

我有一个网站,它有一个自定义控件适配器,用于重写表单上的操作。(这是我们从另一个机构继承的站点)当以调试模式在 localhost 上运行时,一切正常。但是,一旦我将站点发布到我们的 QA 环境中的服务器,自定义适配器就会停止触发。

我已经发布了调试符号并附加到 w3wp 进程。单步执行页面加载过程和自定义控件适配器中设置的断点永远不会被命中。当您在本地主机上调试时,它们会在每次页面加载时触发。生产代码在同一台服务器上运行,生产中的自定义控制适配器正在工作。但是,我们需要对生产进行更新,我们担心会破坏生产站点。

有谁知道为什么自定义控制适配器不会在服务器上触发?我以前从未使用过自定义适配器,除了将适配器放入 App_Code 文件夹和 App_Browser 文件夹中的 .browser 文件中的条目之外,还有什么需要做的吗?

App_Code 文件夹中的适配器代码:

还有我在 App_Browser 文件夹中的 .browser 文件:

0 投票
1 回答
414 浏览

.net - CheckBox 和 RadioButton 控制适配器

前段时间我为 CheckBoxList 编写了一个控制适配器来更改标记,一切都很好。
然后我为 CheckBox 编写了一个适配器,一切都很好。
然后我注意到站点上的 RadioButton 正在使用我的 Checkbox 控件适配器中的 render 方法。

由于 RadioButton 是从 CheckBox 继承的,它们总是会被我的 CheckBox 控件适配器捕获。有什么办法可以阻止这种情况,因为我不想覆盖单选按钮的呈现,因为这意味着通过我们的 CMS 更改许多其他代码。

或者,如果对象是单选按钮,我可以在我的控制适配器中转义 Render 方法吗?
我最初认为我可以使用 base.Render(),但显然它走错了路(它们都继承自 WebControl/Control),我基本上需要一个“parent.Render()”。

有任何想法吗?还是我被迫在新的控制适配器中复制单选按钮渲染?

如果有帮助,我的浏览器文件如下...

非常感谢。

0 投票
1 回答
694 浏览

asp.net - 创建自定义 GridviewAdapter

我想为 Gridview 控件制作一个简单的适配器,它将在<div>标签内呈现单元格内容。

而不是渲染为

我希望它呈现为

我知道这可以使用 Jquery 或在 RowDataBound 中以其他方式完成,但我特别想使用适配器来完成。

在我看来,如果有办法查看创建默认 .Net Gridview 的适配器的代码,那么更改会很简单,但是我不知道如何获取该代码。

任何帮助是极大的赞赏。