为什么元刷新标记和标题标记位于ASP.NET的标记之外?

时间:2010-07-21 09:10:33

标签: c# asp.net episerver

当我在ASP.NET中呈现页面时,会发生以下情况

</head>
<NOSCRIPT>
<meta http-equiv="REFRESH" content="0;URL=/Default.aspx?id=84&epslanguage=en-GB&jse=0" />
</NOSCRIPT>
<title>Page title goes here.</title>
<body>

我的主页看起来像这样:

<title>Page title goes here.</title>
</head>
<body>

所以我要问的是,这个刷新元标记来自哪里,为什么它把它放在我的头标记和正文标记之间,为什么我的页面标题跳出了头部?!

在firebug中查看页面生成的源时,它会在head标记中显示title标记和这个新元标记,但在任何浏览器中查看源代码,它都如上所示。当使用wget刮擦页面时,它也会错误地显示在上面。

为什么浏览器可能会以不同的方式解释这个问题,更重要的是这个新的元标记来自何处?

谢谢!卡尔。

编辑:

嗨!

感谢您的回复,非常有用!

我发现问题在于这行代码:

Page.Header.Controls.Add(ctrl);

将神秘元标记用于此行会将其置于head标记之外。评论时,标题标签会回到正确的位置,一切都很好!

还有什么想法?

谢谢!

卡尔。

3 个答案:

答案 0 :(得分:0)

关于为什么浏览器会以不同的方式解释它,有两个答案。首先,你所说的firebug输出是生成源。这意味着它已经经历了一定程度的处理,显然firefox正在做一些魔术说“好吧,它的元标题和标题标签,它们应该在标题中,所以我会把它们放在那里。”

您正在比较其原始来源的其他浏览器听起来就像是在浏览器尝试理解它之前。如果您在firefox(ctrl-u)中查看原始源代码,我怀疑您会得到相同的结果。

我原本期望所有的浏览器都能像你所描述的那样做很多事情,但如果不这样做那么那就不值得关注了。当收到这样的无效HTML时,浏览器没有真正的规则来做什么。这意味着欢迎浏览器做任何他们想做的事情,试图猜测你的意思,完全忽略它。

至于导致它的原因,epslanguage查询参数来自episerver - 我不知道它是否在请求URL中,因此它可能只是被持久化或者可能是episerver尝试重定向到具有显式语言的页面而不是仅仅采用默认语言。不幸的是,我不熟悉episerver,所以我不能再说明这一点了。

当然,服务器端的某些内容肯定会导致这种情况发生。

您是否对所有感兴趣的页面或仅仅是一个特定的页面或仅在一个特定情况下获得该页面?

答案 1 :(得分:0)

通常情况下,元素未正确关闭。大多数浏览器会尝试调整标记以使其有意义,但在大多数情况下,标记将被错误地解析。

您可能应该共享更多主页(以及使用它的网络表单)!

答案 2 :(得分:0)

也许你的HEAD标签没有runat =“server”?