programing

파서 오류: '_Default'는 클래스 'System'을 확장하지 않으므로 여기서 허용되지 않습니다.웹.UI.페이지' & 마스터형식 선언

newsource 2023. 8. 18. 22:43

파서 오류: '_Default'는 클래스 'System'을 확장하지 않으므로 여기서 허용되지 않습니다.웹.UI.페이지' & 마스터형식 선언

저는 최근에 Visual Studio 2008에서 웹 프로젝트를 웹 애플리케이션 프로젝트로 전환했습니다. 되었고, 첫 화면되었으나, "" " " " " " " " " "로 때 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "Default.aspx페이지, 오류를 수신했습니다.

Parser Error Message: 'SOME.NAMESPACE.MyApplicationName.WebApplication._Default' is not allowed here because it does not extend class 'System.Web.UI.Page'.

는 "되며 "BasePage"는 확장됩니다.System.Web.UI.Page분명히, 문제는 그 수업에 있지 않습니다. 왜냐하면.login.aspx페이지는 오류 없이 표시되며 기본 페이지에서도 상속됩니다.

로그인 페이지를 포함하여 사이트의 모든 페이지는 마스터 페이지의 하위 페이지입니다.

몇 가지 테스트를 거쳐 오류의 원인이 무엇인지 확인했습니다(왜 오류가 발생하는지는 모르겠지만).

다음 태그가 있는 모든 페이지에서 오류가 발생하지 않습니다.

<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %>

해당 행이 포함되지 않은 모든 페이지에서 오류가 발생합니다.이 작업은 전체 응용프로그램에 걸쳐 수행됩니다.마스터 페이지에서 컨트롤을 참조해야 하는 페이지에만 태그가 있습니다.

그래서, 저는 제 모든 페이지에 그 줄을 추가하고 그것을 끝낼 생각했습니다.하지만 그 행을 추가하면 컴파일 오류가 발생합니다. 'object'에 'Master'에 대한 정의가 포함되어 있지 않습니다.

는 이오는발니다합생서에음에서 입니다.designer.cs와 된 파일ASPX" 유형"입니다."마스터 유형" 선언을 추가한 페이지입니다.

디자이너 파일을 강제로 다시 빌드했지만 변경 사항은 없습니다.해 보았습니다.login.aspx및 (일) 및default.aspx(작동하지 않음) 하지만 정확히 동일합니다.

모든 페이지에 "MasterType" 선언을 추가할 필요 없이 작동하고 싶으며, "fix"가 작동하지 않으므로 aspx 파일에 "MasterType" 선언이 없으면 파서 오류가 발생하는 이유를 아는 사람이 있습니까?이것에 대한 해결책이 있습니까?

코드 예제:

다음의 코드는 다음과 같습니다.login.aspx그리고.login.aspx오류 없이 작동하는 .cs:

Login.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/MainMaster.master" AutoEventWireup="true" Inherits="SOME.NAMESPACE.MyApplicationName.WebApplication.Login" Codebehind="Login.aspx.cs" %>
<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder" Runat="Server">
    <table>
        <tr>
            <td>
                <asp:UpdatePanel ID="upLogin" runat="server">
                    <ContentTemplate>
                        <asp:Panel ID="Panel1" runat="server" DefaultButton="Login1$LoginButton">
                            <asp:Login ID="Login1" runat="server" LoginButtonStyle-CssClass="button" 
                                TextBoxStyle-CssClass="textBoxRequired" 
                                TitleTextStyle-CssClass="loginTitle"  >
                            </asp:Login>
                        </asp:Panel>
                    </ContentTemplate>
                </asp:UpdatePanel>
                    <asp:UpdatePanel ID="upPasswordRecovery" runat="server">
                        <ContentTemplate>
                            <asp:PasswordRecovery ID="PasswordRecovery1" runat="server" 
                                SubmitButtonStyle-CssClass="button" TitleTextStyle-CssClass="loginTitle" 
                                SuccessText="Your new password has been sent to you."
                                UserNameInstructionText="Enter your User name to reset your password." />
                        </ContentTemplate>
                </asp:UpdatePanel>
            </td>
        </tr>
    </table>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="SideBarPlaceHolder" Runat="Server">
    <h2>Login</h2>
    <asp:Button ID="btnCreateAccount" runat="server" Text="Create Account" OnClick="btnCreateAccount_Click" CausesValidation="false" />
</asp:Content>

Login.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SOME.NAMESPACE.MyApplicationName.WebApplication;
using SOME.NAMESPACE.MyApplicationName.Bll;

namespace SOME.NAMESPACE.MyApplicationName.WebApplication
{
    public partial class Login : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Login1.Focus();
        }
        
        protected void btnCreateAccount_Click(object sender, EventArgs e)
        {
            Page.Response.Redirect("~/CreateUser/default.aspx");
        }
    }
}

다음의 코드는 다음과 같습니다.default.aspx그리고.default.aspx.cs웹 에서 볼 때 시키는 것입니다.: 브 라 저 때 파 오 발 생 합 니 다 가 류 웹 서 볼 우 에 서 ▁which ▁when 니 다 합 생 발 ▁the 웹 ▁throwing ▁is

Default.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/MainMaster.master" AutoEventWireup="True" Inherits="SOME.NAMESPACE.MyApplicationName.WebApplication._Default" Codebehind="Default.aspx.cs" %>
<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %>
<asp:Content ID="MainContent" ContentPlaceHolderID="ContentPlaceHolder" Runat="Server">
<div class="post">
    <h2 class="title">Announcements</h2>
    <p class="meta">Posted by Amanda Myer on December 15, 2009 at 10:55 AM</p>
    <div class="entry">
        <p>The MyApplicationName CMDB will be down for maintenance from 5:30 PM until 6:30 PM on Wednesday, December 15, 2009.</p>
    </div>
    <p class="meta">Posted by Amanda Myer on December 01, 2009 at 1:23 PM</p>
    <div class="entry">
        <p>The MyApplicationName CMDB is officially live and ready for use!</p>
    </div>
</div>
</asp:Content>
<asp:Content ID="SideBarContent" ContentPlaceHolderID="SideBarPlaceHolder" Runat="Server">
    <img src="images/MyApplicationName.jpg" alt="MyApplicationName Gremlin" width="250"/>
</asp:Content>

Default.aspx.cs

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using SOME.NAMESPACE.MyApplicationName.Bll;
using SOME.NAMESPACE.MyApplicationName.WebApplication;

public partial class _Default : BasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

난 이해했다.
문제는 웹 응용 프로그램 프로젝트에서 필요에 따라 "이름 공간"을 사용하도록 변환되지 않은 페이지가 프로젝트에 여전히 있다는 것입니다.
저는 그 페이지들이 여전히 주위에 있다면 컴파일되지 않을 것이라고 생각했지만, 만약 그 페이지가 외부에서 온 어떤 것도 참조하지 않는다면 그것은 꽥꽥거리는 것처럼 보이지 않았습니다.그래서 그것이 "시스템"으로부터 물려받지 않았다고 말했을 때.. 브라우저.UI.네임스페이스에 시 " 찾을 수 입니다.페이지"는 페이지 자체가 WebApplication 네임스페이스에 없었기 때문에 실행 시 "BasePage" 클래스를 실제로 찾을 수 없었기 때문입니다.
저는 모든 페이지를 하나씩 검토하여 웹 애플리케이션 네임스페이스에 올바르게 추가되었는지 확인했습니다. 이제 문제 없이 컴파일될 뿐만 아니라 정상적으로 표시됩니다.
야아!

웹 사이트에서 웹 응용 프로그램 프로젝트로 전환하는 것은 얼마나 어려운 일입니까!

ASP 중 하나에서 웹 페이지를 복사했기 때문에 이 문제가 발생했습니다.응용프로그램을 새 응용프로그램에 네트로 연결합니다.

파일의 새 위치를 반영하기 위해 관련 네임스페이스 명령을 변경했지만...aspx 페이지 자체에서 Inherit 매개 변수를 변경하는 것을 잊었습니다.

<%@ Page MasterPageFile="" StylesheetTheme="" Language="C#"
    AutoEventWireup="true" CodeBehind="MikesReports.aspx.cs" 
    Inherits="MikesCompany.MikesProject.MikesReports" %>

Inherit 매개 변수를 변경한 후 오류가 사라졌습니다.

다음 항목을 찾습니다.

프로젝트에 누락되었거나 다른 네임스페이스가 있는 페이지...

<NO Namespace >, ORA

Default.aspx와 다른 네임스페이스는 다음과 같습니다.

Cannot load Default.aspx",

또는 "Default.aspx는 여기에 속하지 않습니다."


솔루션/프로젝트의 페이지로 리디렉션되고 리디렉션될 페이지에 잘못된 네임스페이스가 있는 경우 - 다시 실행할 때까지 컴파일러 오류가 발생하지 않을 수 있습니다.
리디렉션을 제거하거나 주석을 달면 오류가 사라집니다...

페이지를 복사하여 이름을 변경했습니다(aspx/cs).페이지 이름은 "메인 페이지"이므로 cs 파일의 맨 위에 있는 클래스 이름은 다음과 같습니다.

enter image description here

이 오류와 일치하도록 클래스 이름을 변경한 후 해결되었습니다.

저는 페이지에 있는 모든 네임스페이스를 가지고 있었고 위의 솔루션 중 수정된 것은 없었습니다.내 문제는 다음과 같습니다.

<%@ Page Language="C#" 
AutoEventWireup="true" 
CodeBehind="xxx.aspx.cs" 
Inherits="xxx.xxx.xxx" 
MasterPageFile="~masterurl/default.master" %>

그럼 내 안에서aspx.cs가 파일 이름과 .Inheritstag. ㅠㅠ이 했습니다. 그래서 그것은 필요했습니다.

namespace xxx.xxx.xxx

.csInherits.

유사한 오류가 발생했지만 변환에서 발생하지 않았습니다...

시스템. 웹.HttpException: '이름공간'입니다.웹사이트.마스터 사용자 페이지'는 클래스 '시스템'을 확장하지 않으므로 여기서 허용되지 않습니다.웹.UI.마스터 페이지'

저는 또한 MasterPage 수업을 연장하고 있었습니다.

이 오류는 내 마스터 페이지 자체의 단순한 컴파일 오류로 인해 발생했습니다.

시스템. 웹.HttpCompile예외: c:\directory\path\Website\MasterUserPages.마스터(30): 오류 CS1061: 'ASP.masteruserpages_master'에 'btnHelp_Click'에 대한 정의가 포함되어 있지 않으며 'ASP.masteruserpages_master' 유형의 첫 번째 인수를 수락하는 확장 메서드 'btnHelp_Click'을 찾을 수 없습니다(지시 또는 어셈블리 참조를 사용하여 누락했습니까?).

MasterPage를 루트 웹 사이트 폴더로 이동할 때까지 오류를 볼 수 없었습니다.이 작업이 완료되면 MasterPage를 원하는 폴더에 다시 넣을 수 있습니다.

제 문제는 간단했습니다. 마스터 페이지와 마스터입니다.Designer.cs 클래스에 올바른 네임스페이스가 있지만 Master.cs 클래스에 잘못된 네임스페이스가 있습니다.

네임스페이스는 항상 굴절시킬 수 있으며 동시에 모든 페이지를 업데이트합니다.네임스페이스를 강조 표시하고 마우스 오른쪽 버튼을 클릭한 다음 드롭다운 메뉴에서 굴절기를 선택합니다.

나는 웹 애플리케이션에서 마스터 페이지와 링크하고 싶은 웹 페이지를 삭제하고 프로젝트에 새 웹 페이지를 추가한 다음 마스터 페이지를 설정합니다(처음에는 웹 페이지를 해당 aspx 페이지를 처리하는 과정에서 웹 사이트에서 웹 애플리케이션으로 복사했습니다(프로젝트로 웹 애플리케이션으로 변환하는 중이었습니다).

기억하세요..상속은 C#에 대해 대소문자를 구분합니다(vb.net 의 경우는 그렇지 않음).

어려운 방법으로 찾아냈습니다.

저에게는 해결책이 달랐습니다.해당 aspx 페이지가 프로젝트에서 언로드되었으며, 다시 추가하면 오류가 사라집니다.

언급URL : https://stackoverflow.com/questions/2057817/parser-error-default-is-not-allowed-here-because-it-does-not-extend-class-s