2009-09-16 69 views
2

所以,我有一个asp.net图片标签:为什么ASP.Net添加一个 “边界” 属性到ASP:图像

<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验证器认为“边界”元素不应该在那里......但它是添加它的ASP.Net。

我确定这个问题以前已经问过很多次了,但为什么asp.net认为它需要添加它,特别是因为它是无效的?

这怎么能避免,以便它确认?

+0

提炼我的答案。 – ahsteele 2009-09-16 21:39:11

回答

2

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

您的具体问题可以通过在答案的建议下到How to build ImageButton Control Adapter.

+0

是的,这很容易说,但可以避免。目前我的页面没有验证,因为它... – Paul 2009-09-16 21:30:38

1

默认情况下是可以避免的,如果<img>元素出现的<a>元素中,该<img>得到一个丑陋的蓝色边框,以表明它是一个链接。

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

1

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

顺便说一句,border属性远不是ASP.NET发出的唯一不兼容的HTML。

0

border="0"是Netscape 4所必需的,它不支持通常的CSS正确做法。当然,在ASP.NET中实际上并没有多少实际上可以与Netscape 4一起使用,所以这种向后兼容的尝试是毫无意义的。顺便说一句,除了ASP.NET控件的标记差,它实际上仍然在今天和这个年龄段进行浏览器嗅探:它将在图像上省略相关但更无效的'border =“0”'它认为“很好”的浏览器按钮:一系列不包含HTML验证器的白名单浏览器。

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

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过渡的DOCTYPE。所以我不知道为什么你会得到无效的HTML,除非ASP.NET以某种方式detecting your browser作为“降级”。

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

如果你改变你的浏览器用户代理字符串,例如,谷歌机器人字符串代理,你肯定会得到边界=“0”属性在您的渲染。对于常见的调试/浏览不会。但不会通过HTML验证屁股验证是使用自定义用户代理完成的。 – 2016-11-14 11:58:11

2

我同意丹,img标签将使用样式而不是border =“0”进行渲染,但对于我所做的相当少的研究,当您将样式应用于在外部样式表或同一页面上使用img {border:none}进行控制,魔法的发生超出了我的研究范围。但是,我注意到验证器仍然在标记中获得边界= 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,所以请确保您的页面的文档类型不是问题。

和我的网页验证。

0

如果你不想搞乱web配置(就像我做的那样),因为在渲染时定位另一个框架会影响你所有的项目控件渲染,而对于大型项目,这不是一个选项,你可以总是在身体的结束标记之前,你的表格末尾插入该行使用“上页”解决方案(需要的jQuery):

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

使用,这将无法通过HTML验证,最好的办法我已经成立验证表单不是使用asp控件,而是使用常规img标记,使其可以从runat =“server”属性后面的代码访问:

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

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

相关问题