[解決済み] パーサーエラー: '_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のコントロールを参照する必要があるページにのみ、このタグがあります。
そこで、すべてのページにその行を追加して終わりにしようと思いました。 しかし、その行を追加すると、コンパイル・エラーが発生します。 'object' には 'Master' の定義がありません。
このエラーは、私が "MasterType" 宣言を追加した ASPX ページに関連する designer.cs ファイルから発生しています。
デザイナーファイルを強制的に作り直しましたが、何も変わりません。login.aspx(動作中)とdefault.aspx(動作しない)でデザイナーファイルのMaster参照の内容を比較しましたが、全く同じでした。
私はすべてのページに "MasterType" 宣言を追加することなく動作するようにしたいので、そしてその "fix" がとにかく動作しないので、誰か aspx ファイルに "MasterType" 宣言を持たないことがなぜパーサーエラーを引き起こすかを知っていますか? この修正方法はあるのでしょうか?
コード例です。
以下は、エラーなく動作している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 のコードです。
デフォルト.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>
デフォルト.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アプリケーションのプロジェクトで必要な"namespaces"を使うように変換されていないページが、プロジェクト内にまだいくつかあったことです。 そのようなページが残っているとコンパイルできないと思ったのでしょうが、そのページが外部から何も参照していなければ、騒ぐことはないようです。 つまり、ページが "System.Web.UI.Page" から継承していないと言ったとき、それはページ自体が WebApplication 名前空間になかったので、実行時にクラス "BasePage" を実際に見つけることができなかったからです。 私はすべてのページを一つずつ調べて、それらが適切にWebApplication名前空間に追加されていることを確認しました。そして今、それは問題なくコンパイルされるだけでなく、正常に表示されるようになりました。
ウェブサイトからウェブアプリケーションに変換するプロジェクトは、なんと試練に満ちていることでしょう。
関連
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] 2つのリストを結合する
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】C#で四捨五入する方法
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] 関数を終了するには?