gpt4 book ai didi

c# - 解析器错误 : '_Default' is not allowed here because it does not extend class 'System.Web.UI.Page' & MasterType declaration

转载 作者:IT王子 更新时间:2023-10-29 03:56:16 29 4
gpt4 key购买 nike

我最近在 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”的定义

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

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

因为我真的很想让它工作而不必向每个页面添加“MasterType”声明,而且由于“修复”无论如何都不起作用,有谁知道为什么不在上添加“MasterType”声明aspx 文件导致解析器错误?有解决办法吗?

示例代码:

这里是 login.aspx 和 login.aspx.cs 的代码,可以正常工作:

登录.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>

登录.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 的代码,当在网络浏览器中查看时会抛出解析器错误:

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)
{
}
}

谢谢!

最佳答案

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

从网站转换为 Web 应用程序项目是多么艰难的尝试啊!

关于c# - 解析器错误 : '_Default' is not allowed here because it does not extend class 'System.Web.UI.Page' & MasterType declaration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2057817/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com