Frage

In meiner ASPX-Seite Ich habe;

    <%@ 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 meinem aspx.vb ich habe;

    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

Das Ergebnis ist ein leerer Platzhalter und keine Fehler.

Vielen Dank für jede Hilfe

P. S nach Fat_Tony Antwort änderte ich den 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

Aber nach wie vor leider keine Ergebnisse.

War es hilfreich?

Lösung

Anstatt Ihre Usercontrol als Typ „Control“ zu erklären, erklären sie als Klassenname Sie in Ihrer UserControl.ascx-Datei angegeben:

<%@ Control className="MyUserControl" %>

Also in Ihrem Code-Behind auf der ASPX-Seite:

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

Weitere Informationen auf MSDN .

EDIT: überprüfen Sie die Code-Behind-Datei für Ihre Benutzersteuerung und nimmt den Namespace und Klassennamen, die dort sind. Wenn ich meine Benutzersteuerung erstellt wurde automatisch in einen Namensraum hinzugefügt, sowie die Anwendung Namespace auf die Ordnernamen enthalten ist.

Dann in Ihrem .aspx.vb, ersetzen "ASP.ContentModule" mit "Namespace.ClassName" aus dem .ascx.vb Datei. Also, stellen Sie sicher, dass Sie immer noch die Add-Methode auf dem Platzhalter aufrufen.

Mein Beispiel ist in C #, aber ich in vb setzen kann, wenn Sie benötigen. Meine Anwendung bequem namens "Tester" wurde.

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

Andere Tipps

Ich weiß VB nicht allzu gut, aber Sie brauchen nicht die Kontrolle zu erklären, ein Usercontrol und nicht nur Kontrolle zu sein? z.B. Versuchen Sie,

Dim loadmodule As Control

Dim loadmodule As UserControl
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top