Domanda

Nella mia pagina aspx ho;

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

Nel mio aspx.vb ho;

    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

Il risultato è un segnaposto vuoto e senza errori.

Grazie mille per qualsiasi tipo di assistenza

P.S dopo la risposta di Fat_Tony ho cambiato il codice per;

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

Ma ancora nessun risultato, purtroppo.

È stato utile?

Soluzione

Piuttosto che dichiarare il tuo UserControl come tipo "Control", dichiararla come nome della classe specificato nel file UserControl.ascx:

<%@ Control className="MyUserControl" %>

Quindi nel tuo codice sottostante alla pagina aspx:

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

Maggiori informazioni disponibili sul MSDN .

EDIT: Controllare il file code-behind per il controllo utente e prendere nota del nome dello spazio dei nomi e la classe che sono lì. Quando ho creato il mio controllo utente, è stato automaticamente aggiunto a un namespace che conteneva il nome della cartella, così come lo spazio dei nomi di applicazione.

Poi, nel vostro .aspx.vb, sostituire "ASP.ContentModule" con "namespace.classname" dal file .ascx.vb. Inoltre, assicurarsi che si sta ancora chiamando il metodo Add sul segnaposto.

Il mio esempio è in C #, ma posso mettere in VB se avete bisogno. La mia domanda è comodamente chiamato "Tester".

code-behind ASCX:

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

Altri suggerimenti

Non so VB troppo bene, ma non è necessario dichiarare il controllo per essere un controllo utente e non solo di controllo? per esempio. Prova a cambiare

Dim loadmodule As Control

Per

Dim loadmodule As UserControl
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top