代码之家  ›  专栏  ›  技术社区  ›  Amanda Kitson

分析器错误:“\u Default”在此处不允许,因为它不扩展类“System.Web.UI.Page”&主类型声明

  •  39
  • Amanda Kitson  · 技术社区  · 16 年前

    我最近在Visual Studio 2008中将一个网站项目转换为一个web应用程序项目。我最终将其编译,第一个页面(登录屏幕)显示为正常,但当它重定向到Default.aspx页面时,我收到一个错误:

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

    我的所有页面都继承自一个名为“BasePage”的类,该类扩展了System.Web.UI.Page。显然,问题不在于该类,因为login.aspx页面显示时没有错误,并且它也继承了该basepage。

    站点上的所有页面(包括登录页面)都是母版页的子级。

    经过一些测试,我已经确定了是什么导致了错误(尽管我不知道为什么会这样)。

    在我有以下标记的所有页面上,错误不会发生。

    <%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %>
    

    在所有不包含该行的页面上,确实会发生错误。这贯穿于整个应用程序。我只有在需要引用母版页控件的页面上才有标签。

    所以,我想我应该把这一行添加到我所有的页面中,然后完成它。但是当我添加那一行时,我得到一个编译错误: “对象”不包含“主对象”的定义

    此错误来自与我添加了“MasterType”声明的ASPX页面关联的designer.cs文件。

    我已强制重新生成设计器文件,但这不会改变任何内容。我比较了login.aspx(工作)和default.aspx(不工作)之间设计器文件中主引用的内容,但它们完全相同。

    既然我真的想让它工作,而不必向每个页面添加“MasterType”声明,既然“fix”无论如何都不起作用,那么有人知道为什么在aspx文件上没有“MasterType”声明会导致解析器错误吗?有解决办法吗?

    示例代码:

    以下是login.aspx和login.aspx.cs的代码,该代码正常工作:

    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>
    

        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");
            }
        } 
    }
    

    以下是default.aspx和default.aspx.cs的代码,在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)
        {
        }
    }
    

    10 回复  |  直到 16 年前
        1
  •  61
  •   Amanda Kitson    16 年前

    我想出来了。问题是,项目中仍有一些页面没有按照web应用程序项目的需要转换为使用“名称空间”。我想我认为如果仍然有这些页面,它就不会编译,但是如果页面没有引用外部的任何内容,它就不会发出嘎嘎声。“因为它不是在Web类中运行的,所以在Web类中找不到该页面”,所以说“它不是在Web类中运行的”。 我一个接一个地浏览了我的所有页面,并确保它们被正确地添加到WebApplication命名空间中,现在它不仅可以顺利编译,而且可以正常显示。耶!

        2
  •  13
  •   Mike Gledhill    14 年前

    我有这个问题,因为我把一个(相当通用的)网页从我的一个ASP.Net应用程序复制到了一个新的应用程序中。

    我更改了相关的名称空间命令,以反映文件的新位置。。。但是我忘了换衣服了 继承 aspx页本身中的参数。

    <%@ Page MasterPageFile="" StylesheetTheme="" Language="C#"
        AutoEventWireup="true" CodeBehind="MikesReports.aspx.cs" 
        Inherits="MikesCompany.MikesProject.MikesReports" %>
    

    一旦我更改了Inherits参数,错误就消失了。

        3
  •  4
  •   DGK    16 年前

    看看这个:

    <NO Namespace >,或者

    与Default.aspx不同的命名空间,您将得到

    “无法加载Default.aspx”或“Default.aspx不属于此处”。

    另外:如果您重定向到解决方案/项目中的页面,并且 要重定向到的页面的命名空间不正确--您可能无法获得 编译器错误,直到您尝试运行。如果重定向被删除

    顺便问一下,这些错误消息到底是什么意思?这是Access女士吗 “误导”——??

    DGK

        4
  •  2
  •   biggles    10 年前

    enter image description here

    重命名类以匹配此错误后,已解决此错误。

        5
  •  2
  •   JCollerton    10 年前

    对我来说,我在页面上有所有的名称空间,上面的解决方案都没有修复它。我的问题在于:

    <%@ Page Language="C#" 
    AutoEventWireup="true" 
    CodeBehind="xxx.aspx.cs" 
    Inherits="xxx.xxx.xxx" 
    MasterPageFile="~masterurl/default.master" %>
    

    然后在我的 aspx.cs 文件命名空间与名称空间不匹配 Inherits

    namespace xxx.xxx.xxx
    

    在 .cs 继承 .

        6
  •  1
  •   David    15 年前

    我有一个类似的错误,但不是因为转换。。。

    不允许使用HTTPUI.System.MASTERPAGES'Web.System.EXCEPTION'Web.MASTERPAGES'

    我还扩展了MasterPage类。

    该错误是由于母版页本身的一个简单编译错误造成的:

    System.Web.HttpCompileException:c:\directory\path\Website\MasterUserPages.Master(30):错误CS1061:“ASP.MasterUserPages\u Master”不包含“btnHelp\u Click”的定义,并且找不到接受类型为“ASP.MasterUserPages\u Master”的第一个参数的扩展方法“btnHelp\u Click”(是否缺少using指令或程序集参考?)

        7
  •  0
  •   PeterX    14 年前

    我的问题很简单:母版页和Master.Designer.cs类具有正确的命名空间,但Master.cs类具有错误的命名空间。

        8
  •  0
  •   iCon    11 年前

    您始终可以折射名称空间,它将同时更新所有页面。高亮显示名称空间,单击鼠标右键,然后从下拉菜单中选择“折射器”。

        9
  •  0
  •   surbhi    11 年前

        10
  •  0
  •   natoloefstop    9 年前

        11
  •  0
  •   Prashant Abdare    5 年前

    对我来说,修复是不同的。相应的aspx页面已从项目中卸载,我将其添加回来,错误消失了。