Caricamento controlli utente a livello di programmazione in un segnaposto (asp.net)
-
27-09-2019 - |
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.
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