- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Here 在代码隐藏中,我可以找到 转换为 HtmlAnchor : private void Repeater1_ItemDataBo-6ren">
假设我有这个标记:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<a runat="server" id="myLink" href="<%# Container.DataItem %>">Here</a>
</ItemTemplate>
</asp:Repeater>
在代码隐藏中,我可以找到 <a>
转换为 HtmlAnchor
:
private void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
HtmlAnchor myLink = (HtmlAnchor)Repeater1.FindControl("myLink");
}
但是编译器怎么知道<a>
是HtmlAnchor
?它是在编译器中硬编码的吗?
如果我写
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<Foo href="<%# Container.DataItem %>">Here</a>
</ItemTemplate>
</asp:Repeater>
并想要<Foo>
要转换为我的标签 HtmlFoo
类,我该如何实现?
我只是想更深入地了解幕后的编译过程。
最佳答案
通过深入研究 Reference Source,您可以了解很多有关 ASP.NET 内部的知识.
事实证明,从无前缀的 HTML 标签到 HtmlControl 子类的映射被硬编码在一个名为 HtmlTagNameToTypeMapper 的内部类中。 :
static Hashtable _tagMap;
Type ITagNameToTypeMapper.GetControlType(string tagName, IDictionary attributeBag) {
Type controlType;
if (_tagMap == null) {
Hashtable t = new Hashtable(10, StringComparer.OrdinalIgnoreCase);
t.Add("a", typeof(HtmlAnchor));
t.Add("button", typeof(HtmlButton));
t.Add("form", typeof(HtmlForm));
// [and much more...]
_tagMap = t;
}
// [...]
}
GetControlType 由另一个名为 MainTagNameToTypeMapper 的内部类调用:
int colonIndex = tagName.IndexOf(':');
if (colonIndex >= 0) {
// [...]
}
else {
// There is no prefix.
// Try the Html mapper if allowed
if (fAllowHtmlTags) {
return _htmlMapper.GetControlType(tagName, attribs);
}
}
没有公共(public) API 可以注册更多无前缀的 HTML 控件类型。
在更本地化的范围内,父控件可以自定义如何解释其子控件的标签名称。为此,派生自 ControlBuilder,覆盖 GetChildControlType , 并用 [ControlBuilder(typeof(...)] attribute 修饰父控件类.
关于c# - HTML 标签如何转换为 HtmlControl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583887/
显然这个错误是 VS 2012 中的一个已知错误,当您尝试将 a 设置为包含 or 元素的 runat="server"时。 好吧,我实际上使用的是 VS 2010,(尽管 IT 昨晚确实安装了
显然这个错误是 VS 2012 中的一个已知错误,当您尝试将 a 设置为包含 or 元素的 runat="server"时。 好吧,我实际上使用的是 VS 2010,(尽管 IT 昨晚确实安装了
"> 我想将 btnWeb 类更改为 left_not_selected。 我尝试: HtmlControl btnWebL = F
假设我有这个标记: ">Here 在代码隐藏中,我可以找到 转换为 HtmlAnchor : private void Repeater1_ItemDataBo
我有一个使用 C# 和 Visual Studio 创建的网站。 我的 Site.master 中有以下菜单: Home About Contact
根据 VS 中的代码分析对对象调用 Dispose 的建议(我以前不是这样的),我最终得到了一个包含以下内容的方法: using (var favicon = new HtmlLink
我有一小段像这样的 C# 代码: HtmlGenericControl titleH3 = new HtmlGenericControl("h3"); titleH3.Attributes.Add("
我喜欢 HtmlControls,因为没有 HTML 魔法……asp 源代码看起来与客户端看到的类似。 我无法否认 GridView、Repeater、CheckBoxLists 等的实用性,所以当我
我尝试了各种方法来使用 System.Web.UI.HtmlControls;但我没有找到任何引用。 如何使用该命名空间? 最佳答案 转到您的项目的引用资料并确保 System.Web 在那里。如果没
我发现自己需要在 HtmlControls 和 WebControls 上执行相同的操作。我是 DRY 的坚定信徒,并且发现如果我想合并两种类型的功能,则只能使用 Control 类。我在使用 Con
我正在寻找一种方法来将类属性添加到按钮以便对其进行样式设置,但我无法从我的代码中弄清楚如何执行此操作。 System.Web.UI.HtmlControls.HtmlButton 有一个 Attrib
我有一个在 ListView 上设置的 ItemTemplate: HtmlControl 中的数据绑定(bind)在第一次显示 ListView 时无法绑定(bind),在连续运行时,
在 Page 的页面对象模型中,我们在构造函数中初始化了一个 Container,并定义了一个名为 HtmlEdit 的 MyTextBox 和一个使用此文本框进行搜索的方法。 public clas
当我尝试将属性添加到我的母版页中的 html 标记时: 就像后面的代码一样: prmimaryhtml_tag.Attributes.Add("lang", "en") 我收到这个错误: Pars
我正在比较每个命名空间的两个基类,有点困惑。 System.Web.UI.WebControls.WebControl System.Web.UI.HtmlControls.HtmlControl 我
我有一个在 Visual Studio 2005 中创建的旧 Web 项目,最近已升级到 Visual Studio 2010。它是针对 .net 2.0 构建的 它包含一个 ascx 用户控件,其中
我是一名优秀的程序员,十分优秀!