2010-01-13 100 views
36

Recientemente convertí un proyecto de sitio web a un proyecto de aplicación web en Visual Studio 2008. Finalmente conseguí que se compile, y la primera página (la pantalla de inicio de sesión) aparece como normal, pero luego cuando se redirige a la página Default.aspx, he recibido un error:Error del analizador: '_Default' no está permitido aquí porque no extiende la clase 'System.Web.UI.Página' y la declaración MasterType

Parser Error Message: 'SOME.NAMESPACE.MyApplicationName.WebApplication._Default' is not allowed here because it does not extend class 'System.Web.UI.Page'. 

Todos mis páginas heredar 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, se produce el error. 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: 'objeto' no contiene una definición para 'Maestro'

Este error proviene del archivo designer.cs asociado con la página ASPX que he agregado Declaración "MasterType" a.

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" a 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 provoca el error del analizador? ¿Hay una solución para esto?

Código Ejemplo:

Aquí está el código para Login.aspx y login.aspx.cs que está trabajando 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"); 
     } 
    } 
} 

Este es el código para default.aspx y default.aspx.cs cual es tirar el error del analizador cuando se ve 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!

Respuesta

49

Me di cuenta. 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é conversión de prueba de sitio web a proyecto de aplicación web puede ser!

4

Busque este:

cualquier página de su proyecto que tiene un espacio de nombres que falta, o distintos ...

Si tiene cualquier página de su proyecto con <NO Namespace> o un

DIFERENTE Espacio de nombre que Default.aspx, obtendrá este

"No se puede cargar Default.aspx", o esto: "Default.aspx no pertenece aquí".

TAMBIÉN: Si usted tiene una redirección a una página en su Solución/Proyecto y la página que va a ser redirigido a un mal tiene espacio de nombres - usted no puede conseguir un error de compilación, hasta que lo intente y correr. Si se elimina el redireccionamiento o se comenta, el error desaparece ...

BTW - ¿Qué significan estos mensajes de error? ¿Es este MS.Access, con el "error de dirección" - ??

DGK

1

que tenía un error similar, pero no de una Conversión ...

System.Web.HttpException: 'Namespace.Website.MasterUserPages' no está permitido aquí porque no se extiende la clase ' System.Web.UI.MasterPage '

También estaba ampliando la clase MasterPage.

El error fue debido a un error de compilación simple en mi Maestro en sí Página:

System.Web.HttpCompileException: c: \ directorio \ ruta \ sitio web \ MasterUserPages.Master (30): CS1061 de error: 'ASP .masteruserpages_master 'no contiene una definición para' btnHelp_Click 'y no se puede encontrar ningún método de extensión' btnHelp_Click 'que acepte un primer argumento de tipo' ASP.masteruserpages_master '(¿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.

0

Mi problema era simple: la página Master y la clase Master.Designer.cs tenían el Namespace correcto, pero la clase Master.cs tenía el espacio de nombres incorrecto.

11

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 Inherits 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ó.

0

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.

0

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 a la aplicación web para hacer frente a esa página aspx (Estaba convirtiendo el sitio web a la aplicación web como proyecto))

0

He copiado y cambiado el nombre de la página (aspx/cs). El nombre de la página era "MainPage" por lo que el nombre de la clase en la parte superior del archivo cs de la siguiente manera:

enter image description here

Después de cambiar el nombre de la clase para que coincida con este error fue resuelto.

0

Para mí tenía todos los espacios de nombres en las páginas y ninguna de las soluciones anteriores lo solucionó. Mi problema estaba 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. Por lo que necesita

namespace xxx.xxx.xxx 

En el .cs para que coincida con el Inherits.

0

Recuerde .. hereda entre mayúsculas y minúsculas para C# (no así para vb.net)

encontró que de la manera difícil.

Cuestiones relacionadas