IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Ajax Discussion :

[ASP.NET ajax] G�n�ration dynamique d'�l�ment graphique


Sujet :

ASP.NET Ajax

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    50
    D�tails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Par d�faut [ASP.NET ajax] G�n�ration dynamique d'�l�ment graphique
    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 :
    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>
    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
    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);
            }
        }
    }
    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.

    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 !

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 15
    Par d�faut
    Quelle est l'erreur g�n�r� ? Et que contient ta master page ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    50
    D�tails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Par d�faut
    L'erreur g�n�r�e est une erreur classique :
    La r�f�rence d'objet n'est pas d�finie � une instance d'un objet.
    En gros je vois bien que tant que mon objet divProgsAndGrpMarch est � null je ne peux rien en tirer. Mais pourquoi est-il � null ?

    Ma master page est quasi vide :
    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
    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Steervex.SiteMaster" %>
     
    <!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 id="Head1" runat="server">
        <title>Mon site</title>
        <script type="text/javascript" src="../Scripts/jquery-ui.min.js"></script> 
        <asp:ContentPlaceHolder ID="HeadContent" runat="server">
        </asp:ContentPlaceHolder>
    </head>
     
    <body>
        <div id="wrapper">
            <form id="form1" runat="server">
     
                <div id="content">
                    <asp:ContentPlaceHolder ID="MainContent" runat="server">
     
                    </asp:ContentPlaceHolder>
                </div>
     
            </form>
        </div>
    </body>
    </html>
    Merci pour ton aide.

  4. #4
    Membre chevronn� Avatar de Julien698
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2013
    Messages
    237
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : D�cembre 2013
    Messages : 237
    Par d�faut
    Salut,

    Tu ne dois pas instancier ta classe ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    divProgsAndGrpMarch monObjet = new divProgsAndGrpMarch();
    Apr�s tu fais des add en utilisant "monObjet" .

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 15
    Par d�faut
    A priori, lors d'ajout de contr�le dynamique, tu dois recr�er tes �l�ments dans ton page_load. Tu peux donc essayer de placer le code du preInit dans le page_load, peut-�tre ?

  6. #6
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    50
    D�tails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Par d�faut
    Bonjour,

    D�sol� pour ma r�ponse tardive.

    @Julien698 : divProgsAndGrpMarch n'est pas une classe mais bel et bien un objet ASP.net cr��.

    @synergie35 : Effectivement cela permet de recr�er les �l�ments, c'�tait bien cela le probl�me. Il y avait n�anmoins une petite erreur dans mon code � cette ligne dans la fonction btnAddLiaisonGrpProg_Click :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int index = divProgsAndGrpMarch.Controls.OfType<DropDownList>().ToList().Count + 1;
    Je recherchais les index DropDownList alors que je cr�� des TextBox. Donc il fallait :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int index = divProgsAndGrpMarch.Controls.OfType<TextBox>().ToList().Count + 1;

    Merci � vous.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. asp.net + ajax extension
    Par namto dans le forum ASP.NET
    R�ponses: 4
    Dernier message: 03/08/2007, 17h45
  2. R�ponses: 4
    Dernier message: 27/06/2007, 09h13
  3. probleme avec asp.net ajax
    Par tarajji dans le forum ASP.NET
    R�ponses: 3
    Dernier message: 26/03/2007, 10h43
  4. R�ponses: 3
    Dernier message: 20/09/2004, 09h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo