Question

In my .aspx page I have;

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" AspCompat="True" %>

    <%@ Register src="Modules/Content.ascx" tagname="Content" tagprefix="uc1" %>

    <!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>
        <asp:PlaceHolder ID="Modulecontainer" runat="server"></asp:PlaceHolder>
        </div>
        </form>
    </body>  
</html>

In my aspx.vb I have;

    Try
        Dim loadmodule As UserControl
        loadmodule = Me.LoadControl("~/modules/content.ascx")
        Modulecontainer.Controls.Add(loadmodule)
    Catch ex As Exception
        Response.Write(ex.ToString & "<br />")
    End Try

The result is an empty placeholder and no errors.

Thanks a lot for any assistance

P.S after Fat_Tony's answer I changed the code to;

Try
            Dim loadmodule As ASP.ContentModule
            loadmodule = CType(LoadControl("~\Modules\Content.ascx"), ASP.ContentModule)
            Modulecontainer.Controls.Add(loadmodule)
        Catch ex As Exception
            Response.Write(ex.ToString & "<br />")
        End Try

But still no results unfortunately.

Was it helpful?

Solution

Rather than declaring your UserControl as type "Control", declare it as the Class Name you specified in your UserControl.ascx file:

<%@ Control className="MyUserControl" %>

So in your code-behind on the .aspx page:

Dim objControl as ASP.MyUserControl = CType(LoadControl("~\Controls\MyUserControl.ascx"), ASP.MyUserControl)

More info available on MSDN.

EDIT: Check the code-behind file for your user control and take note of the namespace and class name that are in there. When I created my user control, it was automatically added to a namespace which contained the folder name as well as the application namespace.

Then, in your .aspx.vb, replace "ASP.ContentModule" with "Namespace.ClassName" from your .ascx.vb file. Also, make sure you're still calling the Add method on your placeholder.

My example's in C# but I can put up in vb if you need. My application was conveniently named "Tester".

ASCX code-behind:

namespace Tester.modules
{
    public partial class content : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

ASPX code-behind:

namespace Tester
{
    public partial class _Default : System.Web.UI.Page
    {   
        private Namespace.ClassName loadmodule;
        protected void Page_Load(object sender, EventArgs e)
        {
            loadmodule = (Namespace.ClassName)LoadControl("~/modules/content.ascx");
            Modulecontainer.Controls.Add(loadmodule);
        }
    }
}

OTHER TIPS

I don't know VB too well, but don't you need to declare the control to be a UserControl and not just Control? e.g. Try changing

Dim loadmodule As Control

To

Dim loadmodule As UserControl
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top