J'ai récemment converti un projet de site Web en 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 lorsqu'elle a été redirigée vers la page Default.aspx, j'ai reçu une 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 System.Web.UI.Page. De toute évidence, le problème ne vient pas de cette classe car la page login.aspx s'affiche sans erreur et hérite également de cette page de base.
Toutes les pages du site, y compris la page de connexion, sont les enfants d'une page maître.
Après quelques tests, j'ai déterminé ce qui cause l'erreur (bien que je ne sache pas POURQUOI cela se produit).
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'application entière. Je n'ai la balise que sur les pages où il a été nécessaire de référencer des contrôles sur la MasterPage.
Donc, j'ai pensé que j'ajouterais juste cette ligne à toutes mes pages et j'en aurais fini. Mais quand j'ajoute cette ligne, j'obtiens une erreur de compilation: 'objet' ne contient pas de définition pour 'Master'
Cette erreur provient du fichier designer.cs associé à la page ASPX à laquelle j'ai ajouté la déclaration "MasterType".
J'ai forcé une reconstruction du fichier de concepteur, mais cela ne change rien. J'ai comparé le contenu de la référence principale dans les fichiers de concepteur entre le login.aspx (fonctionnant) et le default.aspx (ne fonctionnant pas) mais ils sont exactement les mêmes.
Puisque j'aimerais vraiment le faire fonctionner sans avoir à ajouter la déclaration "MasterType" à everypage, et puisque ce "correctif" 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? Y a-t-il une solution à cela?
Exemple de code:
Voici le code pour login.aspx et login.aspx.cs qui fonctionne sans erreur:
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");
}
}
}
Voici le code pour default.aspx et default.aspx.cs qui génère l'erreur de l'analyseur lorsqu'il est affiché dans un navigateur Web:
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)
{
}
}
Merci!
Je l'ai compris. Le problème était qu'il y avait encore quelques pages dans le projet qui n'avaient pas été converties pour utiliser des "espaces de noms" comme requis dans un projet d'application Web. Je suppose que je pensais que cela ne se compilerait pas s'il y avait encore une de ces pages autour, mais si la page ne faisait référence à rien de l'extérieur, elle ne semblait pas crier. Donc, lorsqu'il disait qu'il n'héritait pas de "System.Web.UI.Page", c'était parce qu'il ne pouvait pas réellement trouver la classe "BasePage" au moment de l'exécution car la page elle-même n'était pas dans l'espace de noms WebApplication. 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, non seulement elle se compile sans problème, elle s'affiche également normalement. Yay!
quel essai de conversion d'un site Web en projet d'application Web peut être!
J'ai eu ce problème, car j'avais copié une page Web (assez générique) d'une de mes applications ASP.Net dans une nouvelle application.
J'ai changé les commandes d'espace de noms pertinentes, pour refléter le nouvel emplacement du fichier ... mais ... j'avais oublié de changer le paramètre Inherits 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'avais changé le paramètre Inherits, l'erreur a disparu.
Cherchez ceci:
N'IMPORTE QUELLE page de votre projet qui a un espace de noms manquant ou différent ...
Si vous avez TOUTE page dans votre projet avec <NO Namespace
>, OR a
Espace de noms différent de Default.aspx, vous obtiendrez ce
"Impossible de charger Default.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 la page qui doit être redirigée vers a un mauvais espace de noms - vous ne pouvez pas obtenir une erreur de compilation, jusqu'à ce que vous essayiez de l'exécuter. Si la redirection est supprimée ou commentée, l'erreur disparaît ...
BTW - Que diable signifient ces messages d'erreur? Est-ce MS.Access, avec la "mauvaise orientation" - ??
DGK
Pour moi, j'avais tous les espaces de noms sur les pages et aucune des solutions ci-dessus ne l'a corrigé. Mon problème était dans:
<%@ 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 à la balise Inherits
. Il fallait donc
namespace xxx.xxx.xxx
Dans le .cs
pour correspondre à Inherits
.
J'ai eu une erreur similaire mais pas d'une conversion ...
System.Web.HttpException: 'Namespace.Website.MasterUserPages' n'est pas autorisé ici car il n'étend pas la classe 'System.Web.UI.MasterPage'
J'étendais également la classe MasterPage.
L'erreur était due à une simple erreur de compilation dans ma page maître elle-même:
System.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 du type 'ASP.masteruserpages_master' a pu être trouvé (il vous manque une directive using ou une référence d'assembly?)
Je n'ai pas pu voir l'erreur tant que je n'ai pas déplacé la MasterPage dans le dossier du site Web racine. Une fois que cela a été réglé, j'ai pu remettre ma MasterPage dans le dossier que je voulais.
Rappelez-vous ... hérite est sensible à la casse pour C # (pas pour vb.net)
Trouvé cela de manière difficile.
Vous pouvez toujours réfracter l'espace de noms et il mettra à jour toutes les pages en même temps. Mettez en surbrillance l'espace de noms, cliquez avec le bouton droit et sélectionnez Réfracteur dans le menu déroulant.
Je supprime cette page Web que je veux lier à la page maître de l'application Web, j'ajoute une nouvelle page Web dans le projet, puis je configure la page maître (Au départ, j'avais copié la page Web du site Web dans l'application Web pour copier cette page aspx (je convertissais site web vers application web comme projet))
Mon problème était simple: la page principale et la classe Master.Designer.cs avaient l'espace de noms correct, mais la classe Master.cs avait le mauvais espace de noms.