为什么ASP.Net为asp:Image添加了“border”属性

时间:2009-09-16 21:27:53

标签: asp.net validation xhtml

所以我有一个asp.net图片标签:

<asp:Image runat="server" ImageUrl="~/Images/img.jpg" width="350px" height="250px" AlternateText="My Image" />

但它正在输出:

<img src="Images/img.jpg" height="250" width="350" border="0" />

... XHTML验证器认为“border”元素不应该存在......但是ASP.Net正在添加它。

我确定此问题之前已被多次询问,但为什么asp.net认为需要添加它,特别是因为它无效?

如何避免这样做才能确认?

7 个答案:

答案 0 :(得分:2)

这是ASP.NET图像Web控件的工作方式。不幸的是,许多内置的ASP.NET Web控件都不是标准投诉,会导致页面无法验证。 CSS Friendly Control Adapters是一种勇敢的尝试,用于“修复”由内置Web控件生成的偶尔无效且不太语义的HTML。

通过遵循How to build ImageButton Control Adapter.

的答案中的建议,可以避免您的特定问题

答案 1 :(得分:2)

我同意Dan的观点,img标签将使用样式而不是border =“0”进行渲染,但是通过我做的相当少的研究,当使用img将样式应用于控件时,border = 0只会消失{border:none}无论是在外部样式表中还是在同一页面上,魔术如何发生都超出了我的研究范围。但是,我注意到验证器仍然在标记中获得border = 0,这意味着asp.net呈现的方式取决于浏览器的类型(或我认为的浏览器代理),为了解决这个问题我不得不强迫asp总是渲染“干净”的代码,如图所示

http://blog.hmobius.com/post/2010/03/03/ASPNET-Part-9-Rendering-Cleaner-HTML.aspx

所以在我的情况下,我添加到web.config文件

<pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID">

另外一点,我使用的是html5文档类型,因此请确保页面的doctype不是问题。

我的页面验证了。

答案 2 :(得分:1)

默认情况下,如果<img>元素中出现<a>元素,则<img>会出现一个丑陋的蓝色边框,表示它是一个链接。

border="0"是一种老式(但简单,可靠且独立)的方法来阻止这种情况。

答案 3 :(得分:1)

并非总是无效。在过去,我们都添加了border =“0”以避免链接图像时的默认蓝色边框。不幸的是,ASP.NET团队没有发现将Image控件与Web标准一起更新是值得的。

顺便说一下,border属性远不是ASP.NET发出的唯一不符合要求的HTML。

答案 4 :(得分:1)

您使用的是ASP.NET 1.1吗?因为在2.0及以上版本中,图像标记呈现为:

    <img src="/Images/img.jpg" alt="My Image" 
style="height:250px;width:350px;border-width:0px;" />

我刚刚对此进行了测试,上面是我得到的(使用Opera 10),文档类型为XHTML 1.0 Transitional。所以我不确定为什么你会得到无效的HTML,除非ASP.NET以某种方式detecting your browser为“低级别”。

  • 您使用的浏览器是什么?
  • 什么版本的.net?
  • 你有什么doctype?

答案 5 :(得分:0)

border="0"对于Netscape 4是必要的,它不支持通常的CSS方式正确地执行它。当然,ASP.NET中实际上并没有多少与Netscape 4一起使用,所以这种向后兼容的尝试是毫无意义的。

顺便说一句,除了ASP.NET控件的标记很差外,它实际上仍然在这个时代进行浏览器嗅探:它会省略相关但在图像按钮上更无效的'border =“0”'对于它认为“好”的浏览器:一系列不包含HTML验证器的白名单浏览器。

浏览器嗅探是一个错误的事情,我们大多数人在几年前停止了做,但ASP.NET默认情况下仍然这样做,除非您在页面声明中使用上游clientTarget使其停止。丑陋的东西,MS。

答案 6 :(得分:0)

如果你不想搞乱网页配置(正如我所做的那样),因为在渲染上定位另一个框架会影响你所有的项目控件渲染,对于大型项目,这不是一个选项,你可以随时使用这个&#34;页面上&#34;解决方法是在body关闭标记之前在表单的末尾插入此行(需要jQuery):

<script type="text/javascript">$('#yourImageId').removeAttr("border");</script>

使用它不会传递HTML验证,我为验证表单而建立的最佳方法是不使用asp控件而是使用常规的img标记,使其可以通过runat =&#34;服务器&#34;属性:

<img ID="myImage" src="Images/img.jpg" height="250" width="350" runat="server"/>

此解决方案将通过HTML验证,您将能够从后面的代码修改图像属性。