Reputation: 10777
I am trying to add a masterpage in asp.net but i am getting an error that saying the page contains markup that is not valid when attached to a masterpage. Here is my masterpage file:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs"
Inherits="Pages_AdminMaster" %>
<!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 style="text-align: right">
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
<asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">Log Out</asp:LinkButton>
</asp:ContentPlaceHolder>
</div>
</form>
And here is the web form that i apply that masterpage:
<%@ Page Language="C#" MasterPageFile="~/Pages/MasterPage.master"
AutoEventWireup="true" CodeFile="Admin.aspx.cs" Inherits="Pages_Admin" %>
<!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>
<style type="text/css">
.style1
{
text-decoration: underline;
color: #0000FF;
}
.style2
{
font-family: 15;
font-size: 12pt;
color: #0000FF;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="style2" style="text-align: right">
</div>
</form>
<p class="style1">
<a href="CreateCourse.aspx">Create a new course</a></p>
<p class="style1">
<a href="ModifyCourse.aspx">Modify a course</a></p>
<p class="style1">
<a href="CreateAccount.aspx">Create a new account</a></p>
<p class="style1">
<a href="DeleteAccount.aspx">Delete an account</a></p>
<p class="style1">
<a href="DisableAccount.aspx">Disable an Account</a></p>
<p class="style1">
<a href="DropStudent.aspx">Drop a Student from a course</a></p>
<p class="style1">
<a href="EnrollStudent.aspx">Enroll a student to a course</a></p>
<p class="style1">
<a href="GetStudentInfo.aspx">Get Student info</a></p>
<p class="style1">
<a href="GetInstructorInfo.aspx">Get Instructor info</a></p>
</body>
</html>
And here is the error in the browser:
Server Error in '/Bannerweb' Application.
Content controls have to be top-level controls in a content page or a nested master
page that references a master page.
Description: An unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the error and where
it
originated in the code.
Exception Details: System.Web.HttpException: Content controls have to be top-level
controls in a content page or a nested master page that references a master page.
Source Error:
An unhandled exception was generated during the execution of the current web request.
Information regarding the origin and location of the exception can be identified using
the
exception stack trace below.
Stack Trace:
[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) +8968123
System.Web.UI.Page.get_Master() +54
System.Web.UI.Page.ApplyMasterPage() +15
System.Web.UI.Page.PerformPreInit() +45
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint) +328
Both pages are in a folder named Pages. Can anyone help me with this? Thanks.
Upvotes: 3
Views: 12566
Reputation: 11
Although MSDN has explained the scenario well, You might get the same error even if you have placed your code in <asp:content>
tag.
Check if you have used **<B> </B>**
tag somewhere within <TD> </TD>
tag there it will display error message convert it to small <b> </b>
tag you will be able to see design part.
Thanks
Upvotes: 0
Reputation: 30727
When you "Add New Item.." in visual studio you should select "Web Form" and then on the lower Right hand side of the window, to the right of the "Name" box you fill in, check the box that says "Select Master Page".
Doing this will give you another dialog, after clicking "Add", to select which master page the new Web form should be using.
Your new webform will have <Content>
tags - usually for Head and Content; depending on your masterpage. The web form will NOT have all the usual <doctype>
and <head>
tags etc etc.
Rather than trying to butcher your current page to get the correct schema, i would start a fresh one and just bring in the code you need.
Upvotes: 2
Reputation: 16585
The webform that uses the master page, you need to put your content within <asp:Content ContentPlaceholderID="ContentPlaceHolder1" runat="server"></asp:Content>
which maps the content to be displayed at a certain page within the master page.
MSDN has more information on how to use <asp:ContentPlaceHolder />
on master pages and <asp:Content />
at http://msdn.microsoft.com/en-us/library/wtxbf3hh(v=vs.100).aspx.
Upvotes: 2