分析器错误:此处不允许使用'_Default',因为它不扩展类'System.Web.UI.Page'& MasterType声明

时间:2010-01-13 15:29:17

标签: c# asp.net master-pages

我最近将一个网站项目转换为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页面显示没有错误,并且它也从该基页继承。

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

经过一些测试后,我确定了导致错误的原因(虽然我不知道为什么会这样做)。

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

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

在所有不包含该行的页面上,都会出现错误。这贯穿整个应用程序。我只在需要在MasterPage上引用控件的页面上有标记。

所以,我想我会把这一行添加到我的所有页面中并完成它。但是当我添加该行时,我收到编译错误: 'object'不包含'Master'的定义

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

我强制重建设计器文件,但这并没有改变任何东西。我在login.aspx(工作)和default.aspx(不工作)之间比较了设计器文件中Master引用的内容,但它们完全相同。

因为我真的想让它工作而不必将“MasterType”声明添加到每个页面,并且因为“修复”无论如何都不起作用,有没有人知道为什么不在“MasterType”声明上一个aspx文件导致解析器错误?有没有解决这个问题?

示例代码:

这是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>

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

以下是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)
    {
    }
}

谢谢!

11 个答案:

答案 0 :(得分:56)

我明白了。问题是项目中仍有一些页面尚未转换为在Web应用程序项目中根据需要使用“名称空间”。我想如果还有任何这些页面,我认为它不会编译,但如果页面没有从外部引用任何东西,它似乎没有发出尖叫声。所以当它说它没有从“System.Web.UI.Page”继承时,因为它在运行时实际上找不到类“BasePage”,因为页面本身不在WebApplication命名空间中。 我逐个浏览了所有页面并确保它们已正确添加到WebApplication命名空间中,现在它不仅可以编译而不会出现问题,而且还可以正常显示。耶!

从网站转换到Web应用程序项目的试验是什么!

答案 1 :(得分:12)

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

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

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

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

答案 2 :(得分:4)

寻找:

项目中有任何缺少或不同命名空间的页面......

如果项目中包含<NO Namespace&gt;的任何页面,或者

与Default.aspx不同的命名空间,你会得到这个

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

另请注意:如果您有一个重定向到解决方案/项目中的页面和 要重定向到的页面有一个错误的命名空间 - 你可能得不到 编译错误,直到您尝试运行。如果删除重定向 或者注释掉,错误就消失了......

BTW - 这些错误信息到底意味着什么?这是MS.Access,有 “误导” - ??

DGK

答案 3 :(得分:2)

我复制并重命名了页面(aspx / cs)。页面名称为“mainpage”,因此cs文件顶部的类名称如下:

enter image description here

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

答案 4 :(得分:1)

我有类似的错误,但没有来自转换......

System.Web.HttpException:此处不允许使用'Namespace.Website.MasterUserPages',因为它不扩展类'System.Web.UI.MasterPage'

我也在扩展MasterPage类。

错误是由于我的母版页本身出现了一个简单的编译错误:

System.Web.HttpCompileException:c:\ directory \ path \ Website \ MasterUserPages.Master(30):错误CS1061:'ASP.masteruserpages_master'不包含'btnHelp_Click'的定义,也没有扩展方法'btnHelp_Click'接受可以找到类型为“ASP.masteruserpages_master”的第一个参数(您是否缺少using指令或程序集引用?)

在将MasterPage移动到根网站文件夹之前,我无法看到错误。一旦处理完毕,我就可以将MasterPage放回到我想要的文件夹中。

答案 5 :(得分:1)

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

<%@ 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中匹配Inherits

答案 6 :(得分:0)

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

答案 7 :(得分:0)

您始终可以折射命名空间,它会同时更新所有页面。突出显示命名空间,右键单击并从下拉菜单中选择折射器。

答案 8 :(得分:0)

我删除了我想要从网页应用程序链接到母版页的网页,在项目中添加新网页然后设置母版页(最初我将网页从网站复制到Web应用程序中来处理该aspx页面(我正在将网站转换为Web应用程序作为项目))

答案 9 :(得分:0)

请记住..继承对C#区分大小写(对于vb.net不是这样)

发现困难。

答案 10 :(得分:0)

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