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!