首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分析器错误:此处不允许使用'_Default‘,因为它没有扩展类'System.Web.UI.Page’和MasterType声明

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

Stack Overflow用户
提问于 2010-01-13 23:29:17
回答 11查看 103.6K关注 0票数 42

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

代码语言:javascript
运行
复制
Parser Error Message: 'SOME.NAMESPACE.MyApplicationName.WebApplication._Default' is not allowed here because it does not extend class 'System.Web.UI.Page'.

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

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

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

在我有以下标记的所有页面上,都不会出现错误。

代码语言:javascript
运行
复制
<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %>

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

所以,我想我应该把这一行添加到我的所有页面中,然后就完成了。但是当我添加这一行时,我得到了一个编译错误:'object‘没有包含'Master’的定义

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

我已经强制重建了设计器文件,但这并没有改变任何事情。我比较了login.aspx (工作)和default.aspx (不工作)设计器文件中主引用的内容,但它们是完全相同的。

既然我真的想让它工作,而不需要在MasterType中添加"MasterType“声明,而且那个”修复“无论如何都不起作用,有人知道为什么在aspx文件上没有”aspx“声明会导致解析器错误吗?有什么办法可以解决这个问题吗?

示例代码:

下面是login.aspx和login.aspx.cs的代码,运行正常,没有错误:

Login.aspx

代码语言:javascript
运行
复制
    <%@ 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

代码语言:javascript
运行
复制
    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");
        }
    } 
}

以下是在web浏览器中查看时抛出解析器错误的default.aspx和default.aspx.cs的代码:

Default.aspx

代码语言:javascript
运行
复制
    <%@ 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

代码语言:javascript
运行
复制
    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)
    {
    }
}

谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2010-01-14 00:06:23

我想通了。问题是,项目中仍然有一些页面没有被转换为使用web应用程序项目中所需的“命名空间”。我想我认为如果周围仍然有这些页面,它就不会编译,但是如果页面没有引用任何来自外部的东西,它似乎就不会发出响声。因此,当它说它不是从"System.Web.UI.Page“继承时,那是因为它在运行时实际上找不到类"BasePage”,因为页面本身不在WebApplication名称空间中。我逐一检查了我的所有页面,并确保它们被正确地添加到WebApplication名称空间中,现在它不仅可以正常编译,而且还可以正常显示。耶!

从网站到web应用程序项目的尝试转换可以是什么样子!

票数 61
EN
查看全部 11 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2057817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档