Pregunta

En mi página .aspx que tengo;

    <%@ 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>

En mi aspx.vb tengo;

    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

El resultado es un marcador de posición vacío y no hay errores.

Muchas gracias por cualquier ayuda

P.S después de la respuesta de Fat_Tony me cambió el código para;

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

Sin embargo, aún no hay resultados, lamentablemente.

¿Fue útil?

Solución

En lugar de declarar su control de usuario como tipo "Control", declara como el nombre de clase especificado en el archivo de Usercontrol.ascx:

<%@ Control className="MyUserControl" %>

Así que en su código subyacente en la página .aspx:

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

Más información disponible en MSDN .

EDIT: Compruebe el archivo de código subyacente para el control de usuario y tomar nota del espacio de nombres y el nombre de clase que están ahí. Cuando creé mi control de usuario, se agrega automáticamente a un espacio de nombres que contenía el nombre de la carpeta, así como el espacio de nombres de la aplicación.

A continuación, en su .aspx.vb, reemplazar "ASP.ContentModule" con "Namespace.ClassName" de su archivo .ascx.vb. Además, asegúrese de que todavía está llamando el método Add en el marcador de posición.

Mi ejemplo es en C #, pero puedo aguantar en VB si es necesario. Mi solicitud fue nombrado convenientemente "Tester".

código subyacente ASCX:

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

        }
    }
}

ASPX de código subyacente:

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

Otros consejos

No sé VB demasiado bien, pero no tiene que declarar el control para que sea un control de usuario y no sólo de control? p.ej. Intente cambiar

Dim loadmodule As Control

a

Dim loadmodule As UserControl
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top