ASP.NET 2.0 User Control that implements a template

W

Wes

I have created a user control in ASP.NET 2.0 that utilizes ITemplate. The
control has no issues (displays fine in a browser) until I try to go into
design mode on the aspx page that is implementing the control. The aspx page
says "Can not switch views: Content is not allowed between the openening and
closing tags for element 'Section'". I have include a simplified version of
the control and the implementation on the aspx page. Any insite into enabling
the user control for view in the design mode of an aspx page would be greatly
appreciated.

user control:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Section.ascx.cs"
Inherits="Common_FormSections_Section" %>

<hr />
<asp:placeHolder ID="contentholder" runat="server"></asp:placeHolder>
<hr />

codebehind:

using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Common_FormSections_Section : System.Web.UI.UserControl
{

protected override void CreateChildControls()
{
if (null != Header)
Content.InstantiateIn(contentholder);
}


protected void Page_Load(object sender, EventArgs e)
{

}

private ITemplate _contentTemplate = null;

[TemplateInstance(TemplateInstance.Single)]
public ITemplate Content
{
get
{
return _contentTemplate;
}
set
{
_contentTemplate = value;
}
}

}

aspx implimentation:
The register tag has been intentional excluded

<uc1:Section ID="Section1" runat="server">
<Content>
This is content

</Content>

</uc1:Section>

Thanks in advance
 
W

Wes

The CreateChildControls method should have read

protected override void CreateChildControls()
{
if (null != Content)
Content.InstantiateIn(contentholder);
}
}
 
B

Brock Allen

UserControls (ASCX files) aren't typically used this way. Usually a Composite
control is used. IOW, and IMO, you don't need the ASCX portion of this control.
In your CreateChildControls add a LiteralControl with the <hr>, then add
your content, then add another LiteralControl with the last <hr>.
 
W

Wes

Thank you for the response. I am only trying to implement an example from MSDN

http://msdn.microsoft.com/library/e...onCreatingTemplatedUserControl.asp?frame=true

of course in the end I will implement something far more complex.

The issue is not the implementation but rather displaying the aspx page in
design mode.

Brock Allen said:
UserControls (ASCX files) aren't typically used this way. Usually a Composite
control is used. IOW, and IMO, you don't need the ASCX portion of this control.
In your CreateChildControls add a LiteralControl with the <hr>, then add
your content, then add another LiteralControl with the last <hr>.


I have created a user control in ASP.NET 2.0 that utilizes ITemplate.
The control has no issues (displays fine in a browser) until I try to
go into design mode on the aspx page that is implementing the control.
The aspx page says "Can not switch views: Content is not allowed
between the openening and closing tags for element 'Section'". I have
include a simplified version of the control and the implementation on
the aspx page. Any insite into enabling the user control for view in
the design mode of an aspx page would be greatly appreciated.

user control:
<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="Section.ascx.cs"
Inherits="Common_FormSections_Section" %>
<hr />
<asp:placeHolder ID="contentholder" runat="server"></asp:placeHolder>
<hr />
codebehind:

using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Common_FormSections_Section :
System.Web.UI.UserControl {

protected override void CreateChildControls()
{
if (null != Header)
Content.InstantiateIn(contentholder);
}
protected void Page_Load(object sender, EventArgs e)
{
}

private ITemplate _contentTemplate = null;

[TemplateInstance(TemplateInstance.Single)]
public ITemplate Content
{
get
{
return _contentTemplate;
}
set
{
_contentTemplate = value;
}
}
}

aspx implimentation:
The register tag has been intentional excluded
<uc1:Section ID="Section1" runat="server">
<Content>
This is content
</Content>

</uc1:Section>

Thanks in advance
 
B

Brock Allen

Sure, I understand. The reason it doesn't work is that the ASCX is the concrete
class that's being put on the page and it doesn't have the [ParseChildren(true)]
attribute (since the class is gen'd form the ASCX) and all the other things
like ControlDesigers that are necessary to make the deisgn mode work. If
you just make your own class (in a .cs file) and don't use the ASCX you'll
be able to put those attrribues on yourself. Check out "Developing Microsoft
ASP.NET Server Controls and Components", by Nikhil Kothari and Vandana Datye
from MS Press as it describes in detail all of what needs to be done to support
the designer.


Thank you for the response. I am only trying to implement an example
from MSDN

http://msdn.microsoft.com/library/en-us/cpguide/html/cpconCreatingTemp
latedUserControl.asp?frame=true

of course in the end I will implement something far more complex.

The issue is not the implementation but rather displaying the aspx
page in design mode.

Brock Allen said:
UserControls (ASCX files) aren't typically used this way. Usually a
Composite control is used. IOW, and IMO, you don't need the ASCX
portion of this control. In your CreateChildControls add a
LiteralControl with the <hr>, then add your content, then add another
LiteralControl with the last <hr>.

I have created a user control in ASP.NET 2.0 that utilizes
ITemplate. The control has no issues (displays fine in a browser)
until I try to go into design mode on the aspx page that is
implementing the control. The aspx page says "Can not switch views:
Content is not allowed between the openening and closing tags for
element 'Section'". I have include a simplified version of the
control and the implementation on the aspx page. Any insite into
enabling the user control for view in the design mode of an aspx
page would be greatly appreciated.

user control:
<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="Section.ascx.cs"
Inherits="Common_FormSections_Section" %>
<hr />
<asp:placeHolder ID="contentholder"
runat="server"></asp:placeHolder>
<hr />
codebehind:
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Common_FormSections_Section :
System.Web.UI.UserControl {
protected override void CreateChildControls()
{
if (null != Header)
Content.InstantiateIn(contentholder);
}
protected void Page_Load(object sender, EventArgs e)
{
}
private ITemplate _contentTemplate = null;

[TemplateInstance(TemplateInstance.Single)]
public ITemplate Content
{
get
{
return _contentTemplate;
}
set
{
_contentTemplate = value;
}
}
}
aspx implimentation:
The register tag has been intentional excluded
<uc1:Section ID="Section1" runat="server">
<Content>
This is content
</Content>
</uc1:Section>

Thanks in advance
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top