これは変です。 Visual Studio 2008のソリューションに新しいWebアプリケーションプロジェクトを追加しました。
マスターページを作成しました。修正なし。新しいWebフォームを作成しました。マスターページをMP作成したばかりです。
それでも、変更はありません。マークアップなし。ユーザーコントロールなし。参照なし。なし。しかし、実行しようとすると、次のようになります:
Content controls have to be top-level controls in a content page or a nested master page that references a master page.
HttpException (0x80004005): Content controls have to be top-level controls in a content page or a nested master page that references a master page.]
System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection) +8665016
System.Web.UI.Page.get_Master() +51
System.Web.UI.Page.ApplyMasterPage() +15
System.Web.UI.Page.PerformPreInit() +45
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +282
このソリューションの範囲外のスタンドアロンプロジェクトで同じことをすれば、うまくいきます。違いがある場合は、WebアプリケーションプロジェクトとWebサイトプロジェクトを使用していることに注意してください。
ウェブフォーム:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
マスターページ:
<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site1.master.vb" Inherits="WebUI.Site1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
Visual Studioを使用する別の方法は次のとおりです。VisualStudioで[新しいアイテム]を実行し、[Webフォーム]を選択すると、スタンドアロンの* .aspx Webフォームが作成されます。 。 Webコンテンツフォームを選択してから、それに添付するマスターページを選択する必要があります。
Webフォームにすべてのマークアップを含める必要はありません(<html>
鬼ごっこ)。マスターページがあるため、コンテンツタグから始めます。 aspxページは次のようになります。
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>
<asp:content id="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
This is the body!
</asp:content>
新しいaspxページを追加するときは、[新しいアイテムの追加]ダイアログで[マスターページの選択]をオンにしてください。
Webフォームは次のようになります。
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>
<asp:Content runat="server" ID="head" ContentPlaceHolderId="head">
<!-- stuff you want in >head%lt; -->
</asp:Content>
<asp:Content runat="server" ID="content" ContentPlaceHolderId="ContentPlaceHolder1">
<h1>Your content</h1>
</asp:Content>
<html>
タグがないことに注意してください
WebFormを作成したときに、[新しい項目の追加]ダイアログ自体で添付されるマスターページを選択しましたか?または、@Page
ディレクティブのMasterPageFile
属性を使用して手動で添付しましたか?後者の場合は、表示されるエラーメッセージの説明になります。
VSは、各種類のページに特定のマークアップを自動的に挿入します。ページ自体の作成時にMasterPageを選択した場合、@Page
宣言と最上位のコンテンツコントロール以外のマークアップは生成されません。
何らかの理由で、ページの作成ダイアログにマスターページを選択するオプションはありません。プログラムでMPを宣言することと、[プロパティ]ペインでプロパティを更新することの両方を試みました。– NoCarrier 13分前
「Webアプリケーション」と「Webサイト」の両方を使用しているためだと思います– NoCarrier 9分前
問題があるのは<@PAGE>タグにある可能性があります。とは言っても、Webアプリケーションを使用しているかどうかに違いはありません。子ページを作成するには、ソリューションエクスプローラーでマスターページを右クリックし、[コンテンツページの追加]を選択します。
この問題が発生しました。これは、二重スラッシュで終わるタグがあるためです。
<//asp:HyperLink>
私はこの例外に遭遇しましたが、私の場合はasp:content要素間の空白が原因でした
したがって、これは失敗しました:
<asp:content runat="server" ContentPlaceHolderID="Header">
Header
</asp:content>
<asp:Content runat="server" ContentPlaceHolderID="Content">
Content
</asp:Content>
しかし、要素間の空白を削除することはできました:
<asp:content runat="server" ContentPlaceHolderID="Header">
Header
</asp:content><asp:Content runat="server" ContentPlaceHolderID="Content">
Content
</asp:Content>
protected void Page_PreInit(object sender, EventArgs e)
{
if (Membership.GetUser() == null) //check the user weather user is logged in or not
this.Page.MasterPageFile = "~/General.master";
else
this.Page.MasterPageFile = "~/myMaster.master";
}
想像以上に遅い... WEBページを開発しているあなただけのマスターページを設定するオプションがあります(ファイル>新規>ウェブサイト)...しかし、ASP.NETプロジェクトを作成するときではありません(ファイル>新規>プロジェクト)-新しく作成されたWebフォームのプロパティを使用してマスターページを設定する必要があり、ASPXソースを変更してマスターページに準拠させる(つまり、ストックHTMLを削除するなど)のはあなた次第です
SharePoint Designer 2013でWebパーツ(.aspx)ページを編集した後にこのエラーが発生しました。SPDのコードを見ると、ページ上部のH1要素が黄色で強調表示されていました。その上にマウスを移動すると、SharePoint:AjaxDeltaがH1以前に閉じられなかったことが示されました。 </SharePoint:AjaxDelta>
を追加すると修正されました。
奇妙なことに、SPD=は、リストビューWebパーツまたはページビューアーWebパーツをページの他の場所で作業していた後にエラーを発生させました。
aspコンテンツを追加し、コンテンツプレースホルダーidを追加する必要がありますマスターページのプレースホルダー。
これを読むことができます link 詳細
私の場合、ページにユーザーコントロールを動的に読み込み、ページとユーザーコントロールの両方にコンテンツタグがありました
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
ユーザーコントロールからこのタグを削除すると、うまくいきました。