c# - studio - Error del analizador: ''_Default'' no está permitido aquí porque no extiende la clase ''System.Web.UI.Page'' y la declaración MasterType
master page html (10)
Hace poco convertí un proyecto de sitio web a un proyecto de aplicación web en Visual Studio 2008. Finalmente lo compilé, y la primera página (la pantalla de inicio de sesión) se mostró como normal, pero luego cuando se redirigió a la página Default.aspx, recibí un error:
Parser Error Message: ''SOME.NAMESPACE.MyApplicationName.WebApplication._Default'' is not allowed here because it does not extend class ''System.Web.UI.Page''.
Todas mis páginas heredan de una clase llamada "BasePage" que extiende System.Web.UI.Page. Obviamente, el problema no está en esa clase porque la página login.aspx se muestra sin error y también hereda de esa página base.
Todas las páginas del sitio, incluida la página de inicio de sesión, son elementos secundarios de una página maestra.
Después de algunas pruebas, he determinado qué causa el error (aunque no sé POR QUÉ lo hace).
En todas las páginas donde tengo la siguiente etiqueta, el error NO ocurre.
<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %>
En todas las páginas que no contienen esa línea, el error Ocurre. Esto es a lo largo de toda la aplicación. Tengo la etiqueta solo en las páginas donde ha habido una necesidad de referencia de controles en la página maestra.
Entonces, pensé que simplemente agregaría esa línea a todas mis páginas y terminaría con eso. Pero cuando agrego esa línea, obtengo un error de compilación: ''object'' no contiene una definición para ''Master''
Este error proviene del archivo designer.cs asociado a la página ASPX a la que he agregado la declaración "MasterType".
Forcé una reconstrucción del archivo de diseñador, pero eso no cambia nada. Comparé el contenido de la referencia maestra en los archivos del diseñador entre login.aspx (trabajo) y default.aspx (no funciona) pero son exactamente iguales.
Como realmente me gustaría hacer que funcione sin tener que agregar la declaración "MasterType" en cada página, y dado que esa "corrección" no funciona de todos modos, ¿alguien sabe por qué no tener la declaración "MasterType" en un archivo aspx? causa el error del analizador? ¿Hay una solución para esto?
Código de ejemplo:
Aquí está el código para login.aspx y login.aspx.cs que funciona sin error:
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");
}
}
}
Aquí está el código para default.aspx y default.aspx.cs que arroja el error del analizador cuando se lo visualiza en un navegador 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)
{
}
}
¡Gracias!
Borro esa página web que quiero vincular con la página maestra de la aplicación web, agrego nueva página web en el proyecto y luego configuro la página maestra (Inicialmente copié la página web del sitio web en la aplicación web para hacer frente a esa página aspx (estaba convirtiendo) sitio web a la aplicación web como proyecto))
Busca esto:
CUALQUIER página en su proyecto que tenga un Espacio de nombre faltante o diferente ...
Si tiene CUALQUIER página en su proyecto con <NO Namespace
>, O a
DIFERENTE Espacio de nombres que Default.aspx, obtendrás esto
"No se puede cargar Default.aspx", o esto: "Default.aspx no pertenece aquí".
TAMBIÉN: Si tiene un redireccionamiento a una página en su solución / proyecto y la página a la que va a redireccionarse tiene un espacio de nombres incorrecto, es posible que no obtenga un error de compilación hasta que intente ejecutarlo. Si la redirección se elimina o se comenta, el error desaparece ...
Por cierto, ¿qué diablos significan estos mensajes de error? ¿Es este MS.Access, con la "dirección equivocada" - ??
DGK
Me lo imaginé. El problema era que aún había algunas páginas en el proyecto que no se habían convertido para usar "espacios de nombres" según fuera necesario en un proyecto de aplicación web. Supongo que pensé que no compilaría si todavía hubiera alguna de esas páginas, pero si la página no hacía referencia a nada desde fuera de sí misma no parecía graznar. Entonces, cuando decía que no heredaba de "System.Web.UI.Page", eso se debía a que en realidad no podía encontrar la clase "BasePage" en tiempo de ejecución porque la página en sí no estaba en el espacio de nombres de la aplicación Web. Revisé todas mis páginas una por una y me aseguré de que se agregaran correctamente al espacio de nombres de la aplicación Web y ahora no solo se compila sin problemas, sino que también se muestra normalmente. ¡Hurra!
¡qué versión de prueba del sitio web a proyecto de aplicación web puede ser!
Mi problema era simple: la página maestra y la clase Master.Designer.cs tenían el espacio de nombres correcto, pero la clase Master.cs tenía el espacio de nombres incorrecto.
Para mí tenía todos los espacios de nombres en las páginas y ninguna de las soluciones anteriores lo solucionó. Mi problema fue en:
<%@ Page Language="C#"
AutoEventWireup="true"
CodeBehind="xxx.aspx.cs"
Inherits="xxx.xxx.xxx"
MasterPageFile="~masterurl/default.master" %>
Luego, en mi archivo aspx.cs
, el espacio de nombres no coincide con la etiqueta Inherits
. Entonces necesitaba
namespace xxx.xxx.xxx
En los .cs
para .cs
las Inherits
.
Recuerde ... inherits distingue entre mayúsculas y minúsculas para C # (no así para vb.net)
Encuéntralo por la vía difícil.
Siempre puede refractar el espacio de nombres y actualizará todas las páginas al mismo tiempo. Resalte el espacio de nombres, haga clic con el botón derecho y seleccione refractor en el menú desplegable.
Tuve este problema, ya que había copiado una página web (bastante genérica) de una de mis aplicaciones ASP.Net en una nueva aplicación.
Cambié los comandos relevantes del espacio de nombres, para reflejar la nueva ubicación del archivo ... pero ... había olvidado cambiar el parámetro Hereda en la página aspx.
<%@ Page MasterPageFile="" StylesheetTheme="" Language="C#"
AutoEventWireup="true" CodeBehind="MikesReports.aspx.cs"
Inherits="MikesCompany.MikesProject.MikesReports" %>
Una vez que cambié el parámetro Inherits, el error desapareció.
Tuve un error similar pero no de una conversión ...
System.Web.HttpException: ''Namespace.Website.MasterUserPages'' no está permitido aquí porque no extiende la clase ''System.Web.UI.MasterPage''
También estaba extendiendo la clase MasterPage.
El error se debió a un simple error de compilación en mi página maestra en sí:
System.Web.HttpCompileException: c: / directory / path / Website / MasterUserPages.Master (30): error CS1061: ''ASP.masteruserpages_master'' no contiene una definición para ''btnHelp_Click'' y ningún método de extensión ''btnHelp_Click'' acepta un primer argumento de tipo ''ASP.masteruserpages_master'' podría encontrarse (¿falta una directiva using o una referencia de ensamblado?)
No pude ver el error hasta que moví la página maestra a la carpeta del sitio web raíz. Una vez que se hizo cargo de eso, pude volver a colocar mi Página maestra en la carpeta que quería.