我有一个具有母版页和子页的应用程序。我的应用程序在本地主机(在我的 Intranet 上)上运行良好。但是,只要我将它放在 Internet 上的服务器上,单击任何菜单后都会出现下面显示的错误。
仅允许直接在包含内容控件的内容页面中使用内容控件。
我有一个具有母版页和子页的应用程序。我的应用程序在本地主机(在我的 Intranet 上)上运行良好。但是,只要我将它放在 Internet 上的服务器上,单击任何菜单后都会出现下面显示的错误。
仅允许直接在包含内容控件的内容页面中使用内容控件。
在整个子页面中仔细检查您的开始和结束内容标签。
确认他们
我有完全相同的问题。问题是我在结束内容标签后有一些空格:
</asp:Content>
删除最后一个结束标记后的所有空格、换行符。
我面临着类似的问题。您是否使用“内容”标签围绕您的代码?
<asp:Content>Add your HTML here</asp:Content>
并为您的部分提供单独的内容标签。标题声明的标题内容和正文声明的正文内容。
另一种可能性是行尾。我从源代码控制中复制了一个旧版本的代码,它强制执行 Unix 样式的行结尾。由于它不是结帐,它不会自动将行尾转换为 DOS/Windows 样式。错误消息是“仅允许直接使用内容控件...”错误,即使页面布局正确。似乎缺少 Windows 样式的换行符导致 ASPX 解析器失败。
我能够通过将代码粘贴到行尾不可知的编辑器中来修复它(这导致行尾被规范化为 Windows 样式),将其重新复制到剪贴板并将其粘贴回 Visual Studio,之后页面处理无误。
在 Tripati Subudhi 在问题中提出的案例中,部署过程中的某些内容完全有可能无意中将行尾转换为 Unix 样式,从而导致错误。
另一个可能的问题是 HTML 注释,我有这些围绕内容控件 - 我相信 ASP.NET 将这些转换为幕后的文字控件 - 因此错误我
此错误的另一个潜在原因:标签的大小写错误。
改变<asp:content>...
以<asp:Content>...
解决我的问题。
故障案例的原因是 Visual Studio 2012(和 2013)中默认设置的内置格式文档功能。可以在 Tools->Options->Text Editor->HTML (Web Forms)->Formatting 中更改此设置:将标签大写设置为“as entered”,工作室将不再破坏您的文件。
对我来说,我不喜欢我有一个 Assembly 和一个 Page 指令被注释掉:
<%--<%@ 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" %>-->
即使在那之后我有一个有效的 Page 指令,并且没有使用 System.Core 做任何事情。删除它们后,它加载正常。
对我来说,这是两个具有相同 ID 的内容控件 - 该文件已在 Visual Studio 之外进行了编辑,因此不会发生重复 ID 的自动重命名。这个误导性错误突出显示了第二个内容控件中的第一个图像,其 ID 与第一个相同 - 多么疯狂!
复制整个页面并将其重新发布到自身上解决了它,因为此时 VS 重命名了重复的控件 ID。
我的母版页在文件开头包含两个<%@ Master %>
UTF-8 BOM,因为我从另一个页面粘贴了指令。我能够通过退格来使其工作。
我一直忽略了一个愚蠢的语法错误。<
我的标签开头有一个额外的东西,我MasterType
一辈子都看不到 ♂️。
<%@ Page Language="vb" AutoEventWireup="true" MasterPageFile="~/Site1.Master" CodeBehind="Default.aspx.vb" Inherits="SomeApp.Web._Default" %>
<<%@ MasterType VirtualPath="~/Site1.Master" %>
就我而言,我忘记添加 AjaxControlToolkit.dll 的程序集引用。
当我添加参考时,错误消失了。
在 SharePoint 中,它发生是因为没有发布 pageLayout。