Erreur de l'analyseur: 'Default 'n'est pas autorisé ici parce qu'il n'étend pas le système de classe'.Web.INTERFACE.Page ' & MasterType declaration
j'ai récemment converti un projet de site Web en un projet d'application web dans Visual Studio 2008. J'ai finalement réussi à le compiler, et la première page (l'écran de connexion) s'est affichée normalement, mais ensuite quand il a été redirigé vers la page par défaut.page aspx, j'ai reçu un message d'erreur:
Parser Error Message: 'SOME.NAMESPACE.MyApplicationName.WebApplication._Default' is not allowed here because it does not extend class 'System.Web.UI.Page'.
toutes mes pages héritent d'une classe appelée "BasePage" qui étend le système.Web.INTERFACE.Page. Évidemment, le problème n'est pas avec cette classe, car la connexion.la page aspx s'affiche sans erreur, et elle hérite aussi à partir de ce basepage.
Toutes les pages du site, y compris la page de connexion, sont des enfants d'une masterpage.
après quelques tests, j'ai déterminé ce qui cause l'erreur (Bien que je ne sache pas pourquoi).
Sur toutes les pages où j'ai la balise suivante, l'erreur ne se produit PAS.
<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %>
sur toutes les pages qui ne contiennent pas cette ligne, l'erreur se produit. C'est tout au long de l'ensemble de l'application. J'ai la balise uniquement sur les pages où il a été nécessaire de faire référence à des contrôles sur la page principale.
donc, j'ai pensé que je voudrais juste ajouter cette ligne à toutes mes pages et être fait avec elle. Mais quand j'ajoute cette ligne, j'obtiens une erreur de compilation: 'object' ne contient pas de définition pour 'Master'
cette erreur vient du concepteur.fichier cs associé à la page ASPX à laquelle j'ai ajouté la déclaration "MasterType".
j'ai forcé une reconstruction du fichier designer, mais cela ne pas changer quoi que ce soit. J'ai comparé le contenu de la référence maître dans les fichiers designer entre les login.aspx (de travail) et la valeur par défaut.aspx (ne fonctionne pas) mais ils sont exactement les mêmes.
comme j'aimerais vraiment le faire fonctionner sans avoir à ajouter la déclaration" MasterType "à everypage, et puisque ce" fix "ne fonctionne pas de toute façon, est-ce que quelqu'un sait pourquoi ne pas avoir la déclaration" MasterType " sur un fichier aspx provoque l'erreur de l'analyseur? Est-il un correctif pour cette?
Exemple De Code:
Voici le code pour la connexion.aspx et login.aspx.cs qui fonctionne sans erreur:
Connexion.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>
Connexion.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");
}
}
}
voici le code par défaut.aspx et default.aspx.cs qui est en train de lancer l'analyseur d'erreur lors de l'affichage dans un navigateur web:
par Défaut.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>
par Défaut.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)
{
}
}
Merci!
10 réponses
j'ai pensé à elle. Le problème était qu'il y avait encore des pages dans le projet qui n'avaient pas été converties pour utiliser des "namespaces" comme nécessaire dans un projet d'application web. Je pense que je pensais qu'il ne compilerait pas s'il y avait encore l'une de ces pages autour, mais si la page ne se réfère à rien de l'extérieur lui-même, il ne semble pas grincer. Alors, quand il a dit qu'il n'héritent pas de "Système.Web.INTERFACE.Page "c'était parce qu'il ne pouvait pas réellement trouver la classe "BasePage" à exécutez le temps parce que la page elle-même n'était pas dans le namespace D'application web. J'ai parcouru toutes mes pages une par une et je me suis assuré qu'elles étaient correctement ajoutées à L'espace de noms WebApplication et maintenant il ne se compile pas seulement sans problème, il s'affiche aussi normalement. yay!!!
quel essai de conversion d'un site web à un projet d'application web peut être!
j'ai eu ce problème, car j'avais copié une page Web (assez générique) à partir d'un de mes ASP.Net applications dans une nouvelle application.
j'ai modifié les commandes namespace pertinentes, pour refléter la nouvelle localisation du fichier... mais... J'avais oublié de changer le Hérite de paramètre dans la page aspx elle-même.
<%@ Page MasterPageFile="" StylesheetTheme="" Language="C#"
AutoEventWireup="true" CodeBehind="MikesReports.aspx.cs"
Inherits="MikesCompany.MikesProject.MikesReports" %>
une Fois que j'ai changé le paramètre Inherits, l'erreur a disparu.
Cherchez ceci:
N'importe quelle page dans votre projet qui a un espace de nom manquant, ou différent...
si vous avez une page dans votre projet avec <NO Namespace
> OU un
Namespace différent de celui par défaut.aspx, vous obtiendrez ce
" ne peut pas charger par défaut.aspx", ou ceci: "Default.aspx n'a pas sa place ici".
aussi: si vous avez une redirection vers une page dans votre Solution / projet et le page pour être Redirigé vers a une mauvaise espace de noms -- vous ne pouvez pas obtenir une erreur de compilateur, jusqu'à ce que vous essayez d'exécuter. Si la redirection est supprimée ou commenté, l'erreur disparaît...
BTW -- Qu'est-ce que ces messages d'erreur signifient? Est-ce MME Accès, avec le "détournement" -- ??
DGK
j'avais copié et renommé la page aspx (/cs). Le nom de la page a été "mainpage" donc le nom de la classe dans le haut de la cs de fichier comme suit:
après avoir renommé la classe pour correspondre à cette erreur a été résolu.
j'ai eu une erreur similaire mais pas d'une Conversion...
Système.Web.HttpException: 'Espace De Noms.Site.MasterUserPages' n'est pas autorisé ici parce qu'il n'étend pas le système de classe'.Web.INTERFACE.MasterPage'
j'étendais aussi la classe de MasterPage.
l'erreur était due à une simple erreur de compilation dans ma page principale elle-même:
Système.Web.HttpCompileException: c:\directory\path\Website\MasterUserPages.Master (30): erreur CS1061: "ASP.masteruserpages_master' ne contient pas de définition pour 'btnHelp_Click' et aucune méthode d'extension 'btnHelp_Click' acceptant un premier argument de type 'ASP.masteruserpages_master ' peut être trouvé (vous manque-t-il une directive d'utilisation ou une référence d'assemblage?)
Je n'ai pas pu voir l'erreur jusqu'à ce que je déplace la page principale dans le dossier du site Web racine. Une fois que cela a été pris en charge, j'ai pu remettre ma page principale dans le dossier que je voulais.
pour moi j'avais tous les namespaces sur les pages et aucune des solutions au-dessus ne l'a corrigé. Mon problème est:
<%@ Page Language="C#"
AutoEventWireup="true"
CodeBehind="xxx.aspx.cs"
Inherits="xxx.xxx.xxx"
MasterPageFile="~masterurl/default.master" %>
Puis dans mon aspx.cs
fichier l'espace de noms ne correspond pas à Inherits
balise. Elle avait donc besoin d'
namespace xxx.xxx.xxx
Dans le .cs
match Inherits
.
mon problème était simple: la page principale et le maître.Designer.la classe cs avait le bon Namespace, mais le maître.la classe cs avait le mauvais espace de noms.
vous pouvez toujours réfracter l'espace de noms et il mettra à jour toutes les pages en même temps. Sélectionnez l'espace de noms, cliquez avec le bouton droit de la souris et sélectionnez refractor dans le menu déroulant.
je supprime cette page web que je veux lier avec la page principale de l'application web, ajouter une nouvelle page Web dans le projet puis définir la page principale(au départ, j'avais copié la page web à partir du site Web dans l'application Web pour faire face à cette page aspx (Je convertissais le site web à l'application web comme projet))
ne pas oublier.. les héritages sont sensibles à la casse pour C# (pas pour vb.net)--1-->
Trouvé que la manière dure.