Ошибка синтаксического анализатора: «_Default» здесь не разрешен, поскольку он не расширяет класс «System.Web.UI.Page» и объявление MasterType - PullRequest
41 голосов
/ 13 января 2010

Я недавно преобразовал проект веб-сайта в проект веб-приложения в 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" %>

На всех страницах, которые не содержат эту строку, возникает ошибка. Это на протяжении всего приложения. У меня есть тег только на страницах, где есть необходимость ссылаться на элементы управления на MasterPage.

Итак, я подумал, что просто добавлю эту строку на все мои страницы и покончу с этим. Но когда я добавляю эту строку, я получаю ошибку компиляции: «объект» не содержит определения «мастер»

Эта ошибка исходит из файла designer.cs, связанной со страницей ASPX, к которой я добавил объявление "MasterType".

Я заставил пересобрать файл конструктора, но это ничего не меняет. Я сравнил содержание ссылки Master в файлах конструктора между login.aspx (работает) и default.aspx (не работает), но они точно такие же.

Так как я действительно хотел бы заставить его работать без необходимости добавлять объявление «MasterType» на каждую страницу, и поскольку это «исправление» не работает в любом случае, кто-нибудь знает, почему не имеет объявление «MasterType» файл aspx вызывает ошибку парсера? Есть ли исправление для этого?

Пример кода:

Вот код для 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, который выдает ошибку синтаксического анализатора при просмотре в веб-браузере:

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)
    {
    }
}

Спасибо!

Ответы [ 10 ]

56 голосов
/ 13 января 2010

Я понял это.Проблема заключалась в том, что в проекте все еще были некоторые страницы, которые не были преобразованы для использования «пространств имен» в соответствии с требованиями проекта веб-приложения.Думаю, я думал, что он не скомпилируется, если вокруг будут еще какие-то из этих страниц, но если страница не ссылается на что-либо извне, она, похоже, не вопит.Поэтому, когда он говорил, что он не наследуется от «System.Web.UI.Page», это было потому, что он не мог фактически найти класс «BasePage» во время выполнения, потому что сама страница не была в пространстве имен WebApplication.Я просмотрел все свои страницы одну за другой и убедился, что они правильно добавлены в пространство имен WebApplication, и теперь он не только компилируется без проблем, но и отображается нормально.ууу!

какой может быть пробный переход с веб-сайта на проект веб-приложения!

12 голосов
/ 14 марта 2012

У меня была эта проблема, поскольку я скопировал (довольно общую) веб-страницу из одного из моих приложений ASP.Net в новое приложение.

Я изменил соответствующие команды пространства имен, чтобы отразить новое местоположение файла ... но ... Я забыл изменить параметр Inherits на самой странице aspx.

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

Как только я изменил параметр Inherits, ошибка исчезла.

4 голосов
/ 01 сентября 2010

Ищите это:

ЛЮБАЯ страница вашего проекта с отсутствующим или другим пространством имен ...

Если у вас есть ЛЮБАЯ страница в вашем проекте с <NO Namespace>, ИЛИ

РАЗНОЕ пространство имен, чем Default.aspx, вы получите это

«Невозможно загрузить Default.aspx», или это: «Default.aspx здесь не принадлежит».

ТАКЖЕ: Если у вас есть Перенаправление на страницу в вашем решении / проекте и страница, которая должна быть перенаправлена, имеет плохое пространство имен - вы можете не получить ошибка компилятора, пока вы не попытаетесь запустить. Если перенаправление удалено или закомментирован, ошибка исчезает ...

Кстати: что, черт возьми, означают эти сообщения об ошибках? Это MS.Access, с «неправильное направление» - ??

DGK

2 голосов
/ 03 мая 2016

Я скопировал и переименовал страницу (aspx / cs). Имя страницы было «mainpage», поэтому имя класса в верхней части файла cs выглядит следующим образом:

enter image description here

После переименования класса для соответствия эта ошибка была устранена.

1 голос
/ 12 августа 2016

Для меня у меня были все пространства имен на страницах, и ни одно из решений выше не исправляло это. Моя проблема была в:

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

Тогда в моем файле aspx.cs пространство имен не соответствует тегу Inherits. Так что нужно

namespace xxx.xxx.xxx

В .cs, чтобы соответствовать Inherits.

1 голос
/ 01 августа 2011

У меня была похожая ошибка, но не при конвертации ...

System.Web.HttpException: «Namespace.Website.MasterUserPages» здесь не допускается, поскольку он не расширяет класс «System.Web.UI.MasterPage»

Я также расширяю класс MasterPage.

Ошибка произошла из-за простой ошибки компиляции в самой моей главной странице:

System.Web.HttpCompileException: c: \ directory \ path \ Website \ MasterUserPages.Master (30): ошибка CS1061: «ASP.masteruserpages_master» не содержит определения для «btnHelp_Click» и нет метода расширения «btnHelp_Click», принимающего можно найти первый аргумент типа «ASP.masteruserpages_master» (отсутствует директива using или ссылка на сборку?)

Мне не удалось увидеть ошибку, пока я не переместил MasterPage в корневую папку веб-сайта. После того, как об этом позаботились, я смог вернуть свою MasterPage обратно в нужную папку.

0 голосов
/ 21 ноября 2016

Помните .. унаследовано с учетом регистра для C # (не так для vb.net)

Нашел это нелегким путем.

0 голосов
/ 28 октября 2015

Я удаляю ту веб-страницу, которую я хочу связать с главной страницей из веб-приложения, добавляю новую веб-страницу в проект, затем устанавливаю главную страницу (Первоначально я скопировал веб-страницу с веб-сайта в веб-приложение для копирования этой страницы ASPX Я преобразовывал сайт в веб-приложение как проект))

0 голосов
/ 08 декабря 2014

Вы всегда можете рефракторировать пространство имен, и оно обновит все страницы одновременно. Выделите пространство имен, щелкните правой кнопкой мыши и выберите рефрактор из выпадающего меню.

0 голосов
/ 22 февраля 2012

Моя проблема была проста: главная страница и класс Master.Designer.cs имели правильное пространство имен, но класс Master.cs имел неправильное пространство имен.

...