在 ASP.NET 中,只允许在包含 Content 控件的内容页中直接使用 Content 控件。

38

我有一个应用程序,其中包含主页面和子页面。在我的本地网络上,我的应用程序运行良好。但是一旦我将它放到互联网上的服务器上,当我单击任何菜单后,就会出现如下错误:

仅允许在包含内容控件的内容页中直接使用内容控件。

屏幕截图


你可以尝试去掉那个空格...也许有额外的空格被视为字面量。 - nunespascal
嗨,我检查过了。但是由于它在本地主机上运行,所以找到解决方案有一点困难。 - Tripati Subudhi
12个回答

26

在子页面中反复检查开头和结尾Content标签。

确认它们:

  • 存在
  • 正确拼写
  • 有一个ID
  • 包含runat=“server”
  • 具有正确的ContentPlaceHolderID

13

我遇到了完全相同的问题。问题出在我的内容标签结束后有一些空格

</asp:Content>

删除最后一个闭合标签后的所有空格和换行符。


8
这是摆脱网络表单的一个很好的理由。 - Beanwah
1
这就是我的错误原因,我多了一个空格。 - Ajay Bhasy

10

我遇到了类似的问题。你是否用“content”标记将代码括起来了?

<asp:Content>Add your HTML here</asp:Content> 

你需要为每个部分使用单独的内容标签。头声明需要使用头内容,而主体声明需要使用正文内容。


2
是的,我有单独的头部和正文内容。而且我的代码在内容占位符中。但仍然出现相同的错误。 - Tripati Subudhi

9
另一个可能性是行尾符。我从源代码控制中复制了旧版本的代码,该代码强制使用Unix风格的行尾符。由于它不是一个checkout,它没有自动将行尾符转换为DOS / Windows样式。错误消息是“只允许直接使用内容控件…”的错误,即使页面布局正确。似乎Windows风格的换行符不足导致ASPX解析器失败。
我通过将代码粘贴到一个行尾符不敏感的编辑器中进行修复(这会将行尾符标准化为Windows样式),然后重新复制到剪贴板中并将其粘贴回Visual Studio中,在此之后,页面可以无错误处理。
在Tripati Subudhi提出的问题中,部署过程中使用的某些东西不小心将行尾符转换为Unix样式,从而导致了错误。

3
我的问题是,我正在使用Visual Studio,所以我选择了全部注释再取消注释。这对我有用。 - But I'm Not A Wrapper Class

6
另一个可能的问题是HTML注释。我曾经在Content控件周围使用过这些注释 - 我相信ASP.NET在幕后将它们转换为文字控件 - 因此会出现错误。

5
另一个可能导致此错误的原因:标签大小写不正确。
<asp:content>...更改为<asp:Content>...在我的情况下解决了问题。
造成错误大小写的原因是Visual Studio 2012(和2013)中内置的格式化文档功能默认设置。可以在“工具”->“选项”->“文本编辑器”->“HTML(Web表单)”->“格式”中更改此设置:将标记大写设置为“按输入内容”,则Studio将不再破坏您的文件。

3

检查文档中的非打印字符

我的母版页在文件开头包含了两个UTF-8 BOM,因为我从另一个页面复制了<%@ Master %>指令。通过回退这些字符,我最终成功使其工作。


1
在Bitbucket中直接编辑导致了我们的问题。删除内容并重新输入解决了这个问题。 - rictionaryFever

2

对我来说,问题在于我注释掉了一个汇编指令和一个页面指令:

<%--<%@ Assembly Name="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" %>--%>
<%--<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyPage.aspx.cs" Inherits="MyClass.MyPage" MasterPageFile="~/_layouts/MyProject/MasterPages/MasterPage.master" %>-->

尽管我在那之后有一个有效的页面指令,并且没有使用 System.Core 进行任何操作。但只要将它们删除,页面就可以正常加载。

2
对我而言,问题出在两个内容控件具有相同的ID——文件在Visual Studio之外进行了编辑,因此重复ID的自动重命名未发生。这种误导性错误将第一个图像突出显示在与第一个相同ID的第二个内容控件内——简直是一场白痴的追逐戏!
将整个页面复制并重新发布解决了问题,因为此时VS会重新命名重复的控件ID。

1
在我的情况下,我忘记添加AjaxControlToolkit.dll的程序集引用。
当我添加了该引用后,错误消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接