web-dev-qa-db-ja.com

パーサーエラー:「_Default」はクラス「System.Web.UI.Page」およびMasterType宣言を拡張しないため、ここでは許可されません

最近、Visual Studio 2008でWebサイトプロジェクトを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'.

私のすべてのページは、System.Web.UI.Pageを拡張する「BasePage」というクラスを継承しています。 login.aspxページはエラーなしで表示され、そのベースページからも継承されるため、明らかに問題はそのクラスにはありません。

ログインページを含むサイト上のすべてのページは、マスターページの子です。

いくつかのテストの後、エラーの原因を特定しました(理由はわかりませんが)。

次のタグがあるすべてのページで、エラーは発生しません。

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

その行を含まないすべてのページで、エラーが発生します。これは、アプリケーション全体に適用されます。タグは、MasterPageでコントロールを参照する必要があるページにのみあります。

だから、私はすべてのページにその行を追加し、それで完了すると思った。しかし、その行を追加すると、コンパイルエラーが発生します。「オブジェクト」には「マスター」の定義が含まれていません

このエラーは、「MasterType」宣言を追加したASPXページに関連付けられているdesigner.csファイルから発生しています。

デザイナーファイルの再構築を強制しましたが、何も変更されません。 login.aspx(機能している)とdefault.aspx(機能していない)のデザイナーファイルのマスター参照の内容を比較しましたが、まったく同じです。

すべてのページに「MasterType」宣言を追加せずに動作させたいので、その「修正」がとにかく動作しないので、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>

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

Webブラウザで表示したときにパーサーエラーをスローする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)
    {
    }
}

ありがとう!

41
Amanda Kitson

私はそれを考え出した。問題は、Webアプリケーションプロジェクトで必要に応じて「名前空間」を使用するように変換されていないプロジェクトのページがまだいくつかあったことです。これらのページがまだあるとコンパイルできないと思ったのですが、ページが外部から何も参照していない場合、ページは不自然に見えませんでした。そのため、「System.Web.UI.Page」から継承しないと言っていたのは、ページ自体がWebApplication名前空間にないため、実行時にクラス「BasePage」を実際に見つけることができなかったからです。すべてのページを1つずつ調べ、WebApplication名前空間に適切に追加されていることを確認しました。問題なくコンパイルされるだけでなく、正常に表示されるようになりました。わーい!

webサイトからWebアプリケーションプロジェクトに変換する試用版はどうなりますか。

57
Amanda Kitson

ASP.Netアプリケーションの1つから(かなり汎用的な)Webページを新しいアプリケーションにコピーしたため、この問題が発生しました。

ファイルの新しい場所を反映するために、関連する名前空間コマンドを変更しました...しかし... aspxページ自体のInheritsパラメーターを変更するのを忘れていました。

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

Inheritsパラメーターを変更すると、エラーはなくなりました。

12
Mike Gledhill

これを探してください:

名前空間が欠落している、または異なるプロジェクト内のページ...

プロジェクトに<NO Namespace>を含むページがある場合、OR a

Default.aspxとは異なる名前空間、これを取得します

「Default.aspxをロードできません」またはこれ:「Default.aspxはここに属していません」。

また、Solution/Projectのページへのリダイレクトがあり、リダイレクト先のページの名前空間に問題がある場合、実行しようとするまで、コンパイラエラーが発生しない場合があります。リダイレクトが削除されるかコメントアウトされると、エラーは消えます...

ところで-これらのエラーメッセージは一体何を意味するのでしょうか?これは、MS.Accessに「誤った指示」がありますか?-?

DGK

4
DGK

ページ(aspx/cs)をコピーして名前を変更しました。ページ名は「メインページ」であったため、csファイルの上部のクラス名は次のとおりです。

enter image description here

このエラーに一致するようにクラスの名前を変更した後、解決されました。

2
biggles

私にとっては、ページにすべての名前空間があり、上記の解決策はどれも修正していません。私の問題は:

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

それから私のaspx.csファイルの名前空間がInheritsタグと一致しませんでした。だから必要だった

namespace xxx.xxx.xxx

の中に .csInheritsと一致します。

1
JCollerton

同様のエラーが発生しましたが、コンバージョンからではありません...

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ディレクティブまたはAssembly参照がありませんか?)

MasterPageをルートWebサイトフォルダーに移動するまで、エラーを確認できませんでした。それが処理されると、MasterPageを必要なフォルダに戻すことができました。

1
David

覚えておいてください。inheritsは、C#で大文字と小文字を区別します(vb.netではそうではありません)

難しい方法を見つけました。

0
natoloefstop

ネームスペースはいつでも屈折させることができ、すべてのページが同時に更新されます。名前空間を強調表示し、右クリックして、ドロップダウンメニューから屈折器を選択します。

0
iCon

私はウェブアプリケーションからマスターページとリンクしたいウェブページを削除し、プロジェクトに新しいウェブページを追加し、マスターページを設定しますプロジェクトとしてのWebアプリケーションへのWebサイト))

0
surbhi

私の問題は簡単でした。マスターページとMaster.Designer.csクラスには正しい名前空間がありましたが、Master.csクラスには間違った名前空間がありました。

0
PeterX