Question

Dans ma page .aspx je;

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

Dans mon aspx.vb je;

    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

Le résultat est un espace réservé vide et aucune erreur.

Merci beaucoup pour toute assistance

P.S après la réponse de Fat_Tony j'ai changé le code;

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

Mais toujours pas de résultats malheureusement.

Était-ce utile?

La solution

Au lieu de déclarer votre UserControl en tant que type « contrôle », déclarer que le nom de classe que vous avez spécifié dans votre fichier UserControl.ascx:

<%@ Control className="MyUserControl" %>

Donc, dans votre code-behind sur la page .aspx:

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

Plus d'informations disponibles sur MSDN .

EDIT: Vérifiez le fichier code-behind pour votre contrôle utilisateur et prendre note de l'espace de noms et le nom de classe qui sont là-dedans. Quand je crée mon contrôle utilisateur, il a été automatiquement ajouté à un espace de noms contenant le nom du dossier ainsi que l'espace de noms d'application.

Ensuite, dans votre .aspx.vb, remplacer "ASP.ContentModule" par "Namespace.ClassName" de votre fichier .ascx.vb. , Assurez-vous aussi appeler encore la méthode Add sur votre espace réservé.

Mon exemple est en C #, mais je peux mettre en vb si vous avez besoin. Ma demande a été commodément nommé « testeur ».

code-behind ASCX:

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

        }
    }
}

code-behind ASPX:

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

Autres conseils

Je ne sais pas VB trop bien, mais ne vous devez déclarer le contrôle d'un UserControl et non seulement le contrôle? par exemple. Essayez de changer

Dim loadmodule As Control

Pour

Dim loadmodule As UserControl
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top