根据我对HTML
的理解,我被那些有效且产生正确ASPX
输出的东西所困扰,但不应该这样做。我需要有人来帮助我找出魔法。很难找到这个特定的现象,我试过,但没有用,所以这里说:
我的同事目前正致力于将JSP
项目迁移到ASPX
。在JSP
中,允许在属性值中使用服务器端控件,如下所示:
<a href="<myServerSideJSPControl mode="test" />" />
请注意,双引号用于分隔href
锚标记的HTML
属性和内部控件的属性值。这适用于JSP
,这很奇怪,但我可以接受,因为我不是JSP
开发人员,因此只是假设JSP
编译器取消了一些奇特的,聪明的技巧。
现在我的同事问我如何将其转换为ASPX
,如果他能够使用这种模式,尽管有任何Visual Studio Intellisense
警告 - 我说不。我百分百肯定这永远不会编译。
然后,为了演示目的,我创建了一个新的Visual Studio ASPX
项目并输入以下内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<img src="<asp:Literal runat="server" Text="http://lorempixel.com/100/100"></asp:Literal> " />
</div>
</form>
</body>
</html>
不管你信不信:它有效!点击 F5 将打开浏览器并显示lorempixel
图像。 HTML
源代码看起来非常精细(为了简洁省略了ASPX
隐藏的ViewState
内容:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<form method="post" action="./WebForm1.aspx" id="form1">
<div>
<img src="http://lorempixel.com/100/100 ">
</div>
</form>
</body>
</html>
任何人都可以向我解释ASPX
解析器如何设法执行这个奇迹?为什么双引号不会破坏文档结构,内部ASPX
控件如何正确区分标记的其余部分?请直接设置我的世界观! ;)