programing

마스터 페이지 이상함 - "내용 컨트롤은 마스터 페이지를 참조하는 내용 페이지 또는 중첩된 마스터 페이지의 최상위 컨트롤이어야 합니다."

magicmemo 2023. 6. 30. 22:14
반응형

마스터 페이지 이상함 - "내용 컨트롤은 마스터 페이지를 참조하는 내용 페이지 또는 중첩된 마스터 페이지의 최상위 컨트롤이어야 합니다."

이 맛은 이상해.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>

의 웹 마크업을 안 .<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>

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

Visual Studio를 사용하는 다른 방법은 다음과 같습니다.Visual Studio에서 새 항목을 수행하고 웹 양식을 선택하면 현재 웹 양식에 대해 가지고 있는 독립 실행형 *.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>꼬리표를 달다

양식을 할 때 "하셨습니까? "새 항목 추가" 대화 상자를 하셨습니까? 아니면 웹 양식을 사용하여 수동으로 첨부했습니까?MasterPageFile@Page? 이 받는 할 수 있을 입니다.후자의 경우 수신되는 오류 메시지를 설명할 수 있습니다.

VS는 각 페이지에 특정 마크업을 자동으로 삽입합니다. 자체를 하면 "", "MasterPage"를 하지 않습니다.@Page선언 및 최상위 콘텐츠 컨트롤.

페이지 작성 대화상자에는 마스터 페이지를 선택할 수 있는 선택사항이 없습니다.MP를 프로그래밍 방식으로 선언하는 것과 속성 창에서 속성을 업데이트하는 것을 모두 시도했습니다.13분 전에 반송파 없음

"웹 애플리케이션"을 사용하는 것이 "웹 사이트"를 사용하는 것이 아니라 "웹 사이트"를 사용하는 것이기 때문이라고 생각합니다. – 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>

늦더라도 안하는 것보다는...웹 사이트를 개발 중인 사용자만 마스터 페이지를 설정할 수 있는 옵션이 제공됩니다(파일>새로 만들기>웹 사이트)...그러나 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";
}

쉐어포인트 디자이너 2013에서 웹 파트(.aspx) 페이지를 편집한 후 이 오류가 발생했습니다.SPD의 코드를 보니 페이지 상단 근처의 H1 요소가 노란색으로 강조 표시되어 있었습니다.SharePoint를 가리키면 다음과 같습니다.아약스 델타는 H1 이전에 폐쇄되지 않았습니다.추가</SharePoint:AjaxDelta>고쳤습니다.

페이지의 다른 곳에서 목록 보기 웹 파트 또는 페이지 뷰어 웹 파트를 작업한 후 SPD가 오류를 발생시킨 것처럼 보여서 이상합니다.

마스터 페이지의 플레이스홀더에 해당하는 asp 내용을 추가하고 내용 플레이스홀더 ID를 추가해야 합니다.

자세한 내용은 이 링크를 참조하십시오.

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

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

사용자 컨트롤에서 이 태그를 제거하는 것이 저에게 효과가 있었습니다.

내 경우에는runat="server"asp:content 태그에 없습니다.바보 같은 건 알지만 누군가가 내가 얻은 빌드에서 코드를 제거했을 수도 있습니다.

그것은 나에게 효과가 있었다.누군가는 같은 상황에 직면할 수도 있습니다.따라서 공유됩니다.

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

반응형