Laden von Benutzersteuerungen programmatisch in einen Platzhalter (asp.net)
-
27-09-2019 - |
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.
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