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