为什么这个类似JSP的ASPX标记有效?

时间:2015-12-17 10:51:01

标签: html asp.net jsp

根据我对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控件如何正确区分标记的其余部分?请直接设置我的世界观! ;)

0 个答案:

没有答案