开发者

Loading user controls programatically into a placeholder (asp.net)

开发者 https://www.devze.com 2022-12-27 03:57 出处:网络
In my .aspx page I have; <%@ Page Language=\"VB\" AutoEventWireup=\"false\" CodeFile=\"Default.aspx.vb\" Inherits=\"_Default\" AspCompat=\"True\" %>

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>
    <bod开发者_如何学运维y>
    <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.


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);
        }
    }
}


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
0

精彩评论

暂无评论...
验证码 换一张
取 消