Подтвердить что ты не робот

Ошибка Parser: "_Default" здесь не допускается, поскольку он не расширяет объявление класса "System.Web.UI.Page" и "MasterType"

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

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

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

Я заставил перестроить файл конструктора, но это ничего не меняет. Я сравнивал содержимое главной ссылки в файлах конструктора между 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)
    {
    }
}

Спасибо!

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

Ответ 3

Ищите это:

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

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

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

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

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

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

ДГК

Ответ 4

У меня была аналогичная ошибка, но не из конверсии...

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 в нужную папку.

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

введите описание изображения здесь

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

Ответ 9

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

<%@ 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.

Ответ 10

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

Обнаружен трудный путь.