Bonjour,
Je cherche � g�n�rer tout b�tement des �l�ments graphiques depuis le c�t� serveur dans une application ASP.NET tout ce qu'il y a de plus basique.
J'arrive � le faire lorsque je suis dans une page ASP.NET et que je n'ai r�f�renc� aucune master page, en revanche d�s que j'en r�f�rence une cela ne fonctionne plus.
Voici le code simpliste que j'utilise, il ajoute un champs TextBox lors de l�appui sur un Bouton. C�t� client :
C�t� serveur :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MonTest.aspx.cs" Inherits="Steervex.Gestion.MonTest" MasterPageFile="~/Site.master"%> <asp:Content ID="ContentGrpProg" ContentPlaceHolderID="MainContent" runat="Server"> <asp:Panel ID="divProgsAndGrpMarch" runat="server"> </asp:Panel> <br /> <br /> <asp:ImageButton ID="btnAddLiaisonGrpProg" runat="server" ImageUrl="~/App_theme/Img/Add.png" ToolTip="Ajouter un couple" OnClick="btnAddLiaisonGrpProg_Click" /> </asp:Content>
Sans Master Page ce code fonctionne. Si je r�f�rence ma master page, comme c'est le cas dans cet exemple, lors du premier appui sur le bouton tout se passe bien, la TexteBox est ajout�e. En revanche lorsque je rappui sur le bouton, ce coup-ci c'est la ligne "divProgsAndGrpMarch.Controls.Add(txt);" de la fonction CreateTextBox qui me renvoie une erreur. Mon panel "divProgsAndGrpMarch" n'existe plus, il est � null.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Steervex.Gestion { public partial class MonTest : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Page_PreInit(object sender, EventArgs e) { // Avant d'écraser les éléments créés précédemment dynamiquement, on les recrée pour les conserver // Ici, récupère la liste de tous les controls créé dynamiquement (grâce à une partie de l'ID (txtDynamic) List<string> keys = Request.Form.AllKeys.Where(key => key.Contains("txtDynamic")).ToList(); int i = 1; foreach (string key in keys) { // On recréé les textbox qu'on avait créé dynamiquement (sinon disparition de la textbox) this.CreateTextBox("txtDynamic" + i); i++; } } protected void btnAddLiaisonGrpProg_Click(object sender, ImageClickEventArgs e) { // On créé les textboxs dynamiquement int index = divProgsAndGrpMarch.Controls.OfType<DropDownList>().ToList().Count + 1; this.CreateTextBox("txtDynamic" + index); } /// <summary> /// Création des textbox + saut ligne /// </summary> /// <param name="id"></param> private void CreateTextBox(string id) { // Création textbox TextBox txt = new TextBox(); txt.ID = id; divProgsAndGrpMarch.Controls.Add(txt); // Création saut de ligne Literal lt = new Literal(); lt.Text = "<br />"; divProgsAndGrpMarch.Controls.Add(lt); } } }
Savez-vous m'expliquer ce que j'ai pu oublier ? Pourquoi mon �l�ment panel (cr�� non dynamiquement, pr�sent � l'origine) passe � null comme cela ?
Merci d'avance !
Partager