INTRODUCTION
In Visual Studio 2010 you can create a Visual Web Part (ie. web part that renders ASCX file). In VS 2010 when you create a Visual Web Part, VS 2010 automatically creates a module that contains the following files:
– Web part class (UserProfileListing.cs below)
– ASCX and code behind
– Elements.xml file
– .webpart file
See below for example:
In Visual Studio 2012 however, the following files don’t exist:
– Web part class
See below:
Rather, the .webpart file references the ASCX code-behind class name directly. And if you open the package file, the ASCX is also not included meaning that your ASCX will not be deployed as part of the WSP file. See below:
This is not working properly for me.
WORKAROUND
The workaround is:
– Create a separate user control that lives in /_CONTROLTEMPLATES.
– Create a class that references Microsoft.SharePoint.WebPartPages.WebPart
– Point your .webpart to the custom class you just created, such as below:
<?xml version=”1.0″ encoding=”utf-8″?>
<webParts>
<webPart xmlns=”http://schemas.microsoft.com/WebPart/v3″>
<metaData>
<type name=”XXX.SP.Quickpoll.Quickpoll.Quickpoll, $SharePoint.Project.AssemblyFullName$” />
<importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
</metaData>
<data>
<properties>
<property name=”Title” type=”string”>Quickpoll</property>
<property name=”Description” type=”string”>The Quickpoll web part.</property>
</properties>
</data>
</webPart>
</webParts>
– Then finally in your custom web part class load the ASCX file:
protected override void CreateChildControls()
{
ControlTemplates.XXX.SP.Quickpoll.Quickpoll control = Page.LoadControl(“~/_CONTROLTEMPLATES/XXX.SP.Quickpoll/Quickpoll.ascx”) as ControlTemplates.XXX.SP.Quickpoll.Quickpoll;
Controls.Add(control);
}
The easiest way is to refer to your Visual Studio 2010 Visual Web Part module template.
Hope this helps,
Tommy


