Announcements
The MyApplicationName CMDB will be down for maintenance from 5:30 PM until 6:30 PM on Wednesday, December 15, 2009.
The MyApplicationName CMDB is officially live and ready for use!
J’ai récemment converti un projet de site Web en un projet d’application Web dans Visual Studio 2008. Je l’ai finalement compilé, et la première page (l’écran de connexion) s’affiche normalement, mais lorsqu’elle est 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. Évidemment, le problème ne vient pas de cette classe car la page login.aspx s’affiche sans erreur et hérite également de cette firebase database.
Toutes les pages du site, y compris la page de connexion, sont des enfants d’une page maître.
Après quelques tests, j’ai déterminé ce qui cause l’erreur (même si je ne sais pas pourquoi).
Sur toutes les pages où j’ai l’étiquette suivante, l’erreur ne se produit PAS.
Sur toutes les pages qui ne contiennent pas cette ligne, l’erreur se produit. Ceci est dans toute l’application. Je n’ai l’étiquette que sur les pages où il est nécessaire de faire référence à des contrôles sur MasterPage.
Donc, j’ai pensé que je voudrais simplement append cette ligne à toutes mes pages et en finir 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 provient du fichier designer.cs associé à la page ASPX à laquelle j’ai ajouté la déclaration “MasterType”.
J’ai forcé la reconstruction du fichier de concepteur, mais cela ne change rien. J’ai comparé le contenu de la référence Master dans les fichiers du concepteur entre login.aspx (working) et default.aspx (ne fonctionne pas) mais ils sont exactement les mêmes.
Comme je voudrais vraiment le faire fonctionner sans avoir à append la déclaration “MasterType” à everypage, et que ce “correctif” ne fonctionne pas du tout, est-ce que quelqu’un sait pourquoi ne pas avoir la déclaration “MasterType” sur un fichier aspx provoque l’erreur d’parsing? Y a-t-il un correctif pour cela?
Exemple de code:
Voici le code de login.aspx et login.aspx.cs qui fonctionne sans erreur:
Login.aspx
Login
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 lance l’erreur d’parsing lors de l’affichage dans un navigateur Web:
Default.aspx
Announcements
The MyApplicationName CMDB will be down for maintenance from 5:30 PM until 6:30 PM on Wednesday, December 15, 2009.
The MyApplicationName CMDB is officially live and ready for use!
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 des pages dans le projet qui n’avaient pas été converties pour utiliser les “espaces de noms” nécessaires dans un projet d’application Web. J’imagine que je pensais que cela ne comstackrait pas s’il y avait encore ces pages, mais si la page ne faisait référence à rien de l’extérieur, elle ne semblait pas craquer. Donc, quand il disait qu’il n’héritait pas de “System.Web.UI.Page”, c’était parce qu’il ne pouvait pas 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. Maintenant, non seulement elles sont compilées sans problème, mais elles sont également affichées normalement. Yay!
quel peut être un essai de conversion d’un site Web en projet d’application Web!
J’avais ce problème, car j’avais copié une page Web (relativement générique) de l’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 modifier 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’ai modifié le paramètre Inherits, l’erreur a disparu.
Cherchez ceci:
N’IMPORTE QUELLE page de votre projet contenant un espace de noms manquant ou différent …
Si vous avez une page dans votre projet avec
DIFFERENT Namespace que Default.aspx, vous obtiendrez ceci
"Impossible de charger Default.aspx" ou ceci: "Default.aspx n'appartient pas ici".
ÉGALEMENT: si vous avez une redirection vers une page de votre solution / projet et que la page à redirect contient un espace de noms incorrect, vous ne pouvez pas obtenir d'erreur de compilation tant que vous n'avez pas essayé de l'exécuter. Si la redirection est supprimée ou commentée, l'erreur disparaît ...
BTW - Qu'est-ce que ces messages d'erreur signifient? Est-ce MS.Access, avec la "mauvaise instruction" - ??
DGK
J’avais copié et renommé la page (aspx / cs). Le nom de la page était “mainpage” donc le nom de la classe en haut du fichier cs était le suivant:
Après avoir renommé la classe pour correspondre à cette erreur a été résolue.
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’élargit pas la classe ‘System.Web.UI.MasterPage’
Je prolongeais également la classe MasterPage.
L’erreur était due à une simple erreur de compilation dans ma maquette même:
System.Web.HttpComstackException: c: \ répertoire \ 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’ pourrait être trouvé (manque-t-il une directive using ou une référence d’assembly?)
Je n’ai pas pu voir l’erreur avant d’avoir déplacé MasterPage dans le dossier du site Web racine. Une fois que cela a été fait, j’ai pu remettre mon MasterPage dans le dossier que je voulais.
Pour moi, j’avais tous les espaces de noms sur les pages et aucune des solutions ci-dessus ne l’a corrigée. Mon problème était dans:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="xxx.aspx.cs" Inherits="xxx.xxx.xxx" MasterPageFile="~masterurl/default.master" %>
Ensuite, dans mon fichier aspx.cs
, l’espace de noms ne correspondait pas à la balise Inherits
. Donc il fallait
namespace xxx.xxx.xxx
Dans le .cs
pour correspondre aux Inherits
.
Mon problème était simple: la page principale et la classe Master.Designer.cs avaient le bon espace de noms, mais la classe Master.cs avait le mauvais espace de noms.
Vous pouvez toujours réfracter l’espace de nom et mettre à 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 associer à la page principale de l’application Web, ajoute une nouvelle page Web au projet, puis configure la page principale (au départ, j’avais copié la page Web du site Web dans cette application). site web à l’application web en tant que projet))
Rappelez-vous .. hérite est sensible à la casse pour C # (pas pour vb.net)
Trouvé cela de manière difficile.