所以我有一个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认为需要添加它,特别是因为它无效?
如何避免这样做才能确认?
答案 0 :(得分:2)
这是ASP.NET图像Web控件的工作方式。不幸的是,许多内置的ASP.NET Web控件都不是标准投诉,会导致页面无法验证。 CSS Friendly Control Adapters是一种勇敢的尝试,用于“修复”由内置Web控件生成的偶尔无效且不太语义的HTML。
的答案中的建议,可以避免您的特定问题答案 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为“低级别”。
答案 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验证,您将能够从后面的代码修改图像属性。