Chargement des contrôles utilisateur dans un espace réservé par programme (asp.net)
-
27-09-2019 - |
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.
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