ProgramingTip

마스터 페이지 이상 함- "콘텐츠 컨트롤은 콘텐츠 페이지의 최상위 컨트롤이거나 마스터 페이지를 참조하는 중첩 된 마스터 페이지가 있습니다."

bestdevel 2020. 11. 13. 23:51
반응형

마스터 페이지 이상 함- "콘텐츠 컨트롤은 콘텐츠 페이지의 최상위 컨트롤이거나 마스터 페이지를 참조하는 중첩 된 마스터 페이지가 있습니다."


이상 해요. Visual Studio 2008의 솔루션에 새로운 웹 응용 프로그램 프로젝트를 추가했습니다.

마스터 페이지를 만들었습니다. 수정 사항이 없습니다. 새 웹 양식을 작성했습니다. 마스터 페이지를 방금 만든 MP로 설정합니다.

그래도 수정은 없습니다. 마크 업이 없습니다. 사용자 컨트롤이 없습니다. 참조가 없습니다. 아무것도. 그러나 결과가 나타납니다.

Content controls have to be top-level controls in a content page or a nested master page that references a master page.
HttpException (0x80004005): Content controls have to be top-level controls in a content page or a nested master page that references a master page.]
   System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection) +8665016
   System.Web.UI.Page.get_Master() +51
   System.Web.UI.Page.ApplyMasterPage() +15
   System.Web.UI.Page.PerformPreInit() +45
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +282

이 솔루션은 외부의 독립 실행 형 프로젝트에서 동일한 작업을 수행하면 제대로 작동합니다. 차이가 권한 웹 응용 프로그램 프로젝트와 웹 사이트 프로젝트를 사용하고 있음을 명심하십시오.

웹 양식 :

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
</body>
</html>

마스터 페이지 :

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site1.master.vb" Inherits="WebUI.Site1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

Visual Studio를 사용하는 또 다른 방법은 다음과 같습니다. Visual Studio에서 새 항목을 수행하고 Web Form을 선택하면 현재 웹 양식에 대한 독립 실행 형 * .aspx 웹 양식이 생성됩니다 (이 작업을 수행 했습니까?). . Web Content Form을 선택한 다음 첨부 할 마스터 페이지를 선택해야합니다.


웹 양식에 <html>태그 와 같은 모든 마크 업이 있으면 안됩니다 . 마스터 페이지가 있으므로 콘텐츠 태그로 시작하면됩니다. aspx 페이지는 다음과 같아야합니다.

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>

<asp:content id="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
   This is the body!
</asp:content>

새 aspx 페이지를 추가 할 때 "새 항목 추가"대화 상자에서 "마스터 페이지 선택"을 확인하십시오.


웹 양식은 다음과 같아야합니다.

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>
<asp:Content runat="server" ID="head" ContentPlaceHolderId="head">
<!-- stuff you want in &gt;head%lt; -->
</asp:Content>

<asp:Content runat="server" ID="content" ContentPlaceHolderId="ContentPlaceHolder1">
<h1>Your content</h1>
</asp:Content>

<html>태그 가 없습니다.


WebForm을 만들 때 "Add New Item"대화 상자 자체에서 첨부 된 마스터 페이지를 선택 했습니까? 아니면 지시문 MasterPageFile속성을 사용하여 수동으로 첨부 했 @Page습니까? 후자 인 경우 수신 한 오류 메시지를 설명 할 수 있습니다.

VS는 각 페이지 종류에 특정 마크 업을 자동으로 삽입합니다. 페이지를 만들 때 MasterPage를 선택하면 @Page선언 및 최상위 콘텐츠 컨트롤을 제외한 모든 태그가 생성되지 않습니다 .


어떤 이유로 페이지 만들기 대화 상자에 마스터 페이지를 선택하는 옵션이 없습니다. 프로그래밍 방식으로 MP를 선언하고 속성 창에서 속성을 업데이트 해 보았습니다. – NoCarrier 13 분 전

나는 "웹 ​​응용 프로그램"과 "웹 사이트"를 사용하고 있기 때문에 믿습니다 – NoCarrier 9 분 전

문제가있는 <@PAGE> 태그에있을 가능성이 있습니다. 즉, 웹 응용 프로그램을 사용하는지 여부에 관계없이 차이가 없습니다. 자식 페이지를 만들려면 솔루션 탐색기에서 마스터 페이지를 마우스 오른쪽 단추로 클릭하고 콘텐츠 페이지 추가를 선택합니다.


이 문제가 발생했습니다. 이중 슬래시로 끝나는 태그가 있었기 때문입니다.

<//asp:HyperLink>

방금이 예외가 발생했으며 제 경우에는 asp : content 요소 사이의 공백으로 인해 발생했습니다.

그래서 이것은 실패했습니다.

<asp:content runat="server" ContentPlaceHolderID="Header">
    Header
</asp:content>

<asp:Content runat="server" ContentPlaceHolderID="Content">
    Content
</asp:Content>

그러나 요소 사이의 공백을 제거하면 효과가 있습니다.

<asp:content runat="server" ContentPlaceHolderID="Header">
    Header
</asp:content><asp:Content runat="server" ContentPlaceHolderID="Content">
    Content
</asp:Content>

내가 생각하지 않는 것보다 늦게까지 ... 웹 사이트를 개발하는 경우에만 MASTERPAGE를 설정할 수있는 옵션이 제공됩니다 (FILE> NEW> WEBSITE) ...하지만 ASP.NET 프로젝트를 만들 때는 (FILE> NEW>) PROJECT)-새로 생성 된 웹 양식의 속성을 사용하여 마스터 페이지를 설정해야하며 마스터 페이지와 호환되도록 ASPX 소스를 수정하는 것은 사용자에게 달려 있습니다 (예 : 스톡 HTML 제거 등).


protected void Page_PreInit(object sender, EventArgs e) 
{ 
 if (Membership.GetUser() == null) //check the user weather user is logged in or not
    this.Page.MasterPageFile = "~/General.master";
 else
    this.Page.MasterPageFile = "~/myMaster.master";
}

SharePoint Designer 2013에서 웹 파트 (.aspx) 페이지를 편집 한 후이 오류가 발생했습니다. SPD에서 코드를 보았을 때 페이지 상단 근처의 H1 요소가 노란색으로 강조 표시되었습니다. 마우스를 가져 가면 SharePoint : AjaxDelta가 H1 이전에 닫히지 않았 음을 나타냅니다. </SharePoint:AjaxDelta>수정 추가 .

SPD가 페이지의 다른 곳에서 listview 웹 파트 또는 페이지 뷰어 웹 파트를 작업 한 후 오류를 도입 한 것처럼 보였기 때문에 이상했습니다.


제 경우에는 페이지에서 동적으로 사용자 정의 컨트롤을로드하고 있었고 페이지와 사용자 정의 컨트롤 모두에 콘텐츠 태그가있었습니다.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

사용자 정의 컨트롤에서이 태그를 제거하면 저에게 효과적이었습니다.


ASP 콘텐츠 를 추가 하고 마스터 페이지의 자리 표시 자에 해당하는 콘텐츠 자리 표시 자 ID 를 추가해야 합니다.

자세한 내용은 링크읽을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/835877/master-page-weirdness-content-controls-have-to-be-top-level-controls-in-a-con

반응형