最近、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)
{
}
}
ありがとう!
私はそれを考え出した。問題は、Webアプリケーションプロジェクトで必要に応じて「名前空間」を使用するように変換されていないプロジェクトのページがまだいくつかあったことです。これらのページがまだあるとコンパイルできないと思ったのですが、ページが外部から何も参照していない場合、ページは不自然に見えませんでした。そのため、「System.Web.UI.Page」から継承しないと言っていたのは、ページ自体がWebApplication名前空間にないため、実行時にクラス「BasePage」を実際に見つけることができなかったからです。すべてのページを1つずつ調べ、WebApplication名前空間に適切に追加されていることを確認しました。問題なくコンパイルされるだけでなく、正常に表示されるようになりました。わーい!
webサイトからWebアプリケーションプロジェクトに変換する試用版はどうなりますか。
ASP.Netアプリケーションの1つから(かなり汎用的な)Webページを新しいアプリケーションにコピーしたため、この問題が発生しました。
ファイルの新しい場所を反映するために、関連する名前空間コマンドを変更しました...しかし... aspxページ自体のInheritsパラメーターを変更するのを忘れていました。
<%@ Page MasterPageFile="" StylesheetTheme="" Language="C#"
AutoEventWireup="true" CodeBehind="MikesReports.aspx.cs"
Inherits="MikesCompany.MikesProject.MikesReports" %>
Inheritsパラメーターを変更すると、エラーはなくなりました。
これを探してください:
名前空間が欠落している、または異なるプロジェクト内のページ...
プロジェクトに<NO Namespace
>を含むページがある場合、OR a
Default.aspxとは異なる名前空間、これを取得します
「Default.aspxをロードできません」またはこれ:「Default.aspxはここに属していません」。
また、Solution/Projectのページへのリダイレクトがあり、リダイレクト先のページの名前空間に問題がある場合、実行しようとするまで、コンパイラエラーが発生しない場合があります。リダイレクトが削除されるかコメントアウトされると、エラーは消えます...
ところで-これらのエラーメッセージは一体何を意味するのでしょうか?これは、MS.Accessに「誤った指示」がありますか?-?
DGK
私にとっては、ページにすべての名前空間があり、上記の解決策はどれも修正していません。私の問題は:
<%@ 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
と一致します。
同様のエラーが発生しましたが、コンバージョンからではありません...
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を必要なフォルダに戻すことができました。
覚えておいてください。inheritsは、C#で大文字と小文字を区別します(vb.netではそうではありません)
難しい方法を見つけました。
ネームスペースはいつでも屈折させることができ、すべてのページが同時に更新されます。名前空間を強調表示し、右クリックして、ドロップダウンメニューから屈折器を選択します。
私はウェブアプリケーションからマスターページとリンクしたいウェブページを削除し、プロジェクトに新しいウェブページを追加し、マスターページを設定しますプロジェクトとしてのWebアプリケーションへのWebサイト))
私の問題は簡単でした。マスターページとMaster.Designer.csクラスには正しい名前空間がありましたが、Master.csクラスには間違った名前空間がありました。