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 Discussion :

Récupérer valeur d'un champ, master page et request.form


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut Récupérer valeur d'un champ, master page et request.form
    Bonjour,

    J'ai un souci qui en amène un autre. Par conséquent, dans l'idéal, je préfèrerais résoudre le premier plutôt que le second.

    J'ai un formulaire dans ma page.
    Code asp.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <h2>Détail de l'appel</h2>
    <asp:Label AssociatedControlID="TxtPersonId" Text="Créateur : " runat="server"/><asp:TextBox ID="TxtPersonId" runat="server" style="display:none" /><asp:TextBox ID="TxtPersonName" runat="server" ReadOnly="true"/><br />
    <asp:Label AssociatedControlID="TxtCompanyId" Text="Client : " runat="server"/><asp:TextBox ID="TxtCompanyId" runat="server" style="display:none" /><asp:TextBox ID="TxtCompanyName" runat="server" ReadOnly="true" /><br />
    <asp:Label AssociatedControlID="TxtProjectId" Text="Projet : " runat="server"/><asp:TextBox ID="TxtProjectId" runat="server" style="display:none" /><asp:TextBox ID="TxtProjectName" runat="server" ReadOnly="true" /><br />
    <asp:Label AssociatedControlID="TxtStepId" Text="Étape : " runat="server"/><asp:TextBox ID="TxtStepId" runat="server" style="display:none" /><asp:TextBox ID="TxtStepName" runat="server" ReadOnly="true" /><asp:Button type="button" text="🔍" runat="server" CssClass="btnsearch" ID="BtnShowSearch" OnClientClick="ShowModal(this, 'SearchForm'); return false;" /><br />
    <asp:Label AssociatedControlID="TxtContractId" Text="Contrat : " runat="server"/><asp:TextBox ID="TxtContractId" runat="server" style="display:none" /><asp:TextBox ID="TxtContractName" runat="server" ReadOnly="true"/><br />
    <asp:Button ID="BtnSave" Text="Enregistrer" runat="server" OnClick="BtnSave_Click" CssClass="btnsubmit" Enabled="false" />

    Lorsque je clique sur mon bouton, je crée un objet qui récupère les données saisies, puis je l'enregistre dans la base (après avoir contrôlé que tout va bien).

    Dans mon "Page_OnLoad", je gère la création de l'instance de mon objet dans un "if (IsPostBack)" :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            Ticket ticket = new Ticket();
     
            if (IsPostBack)
            {
                ticket.Name = Request.Form[TxtTicketName.ClientID];
                ticket.Start = DateTime.Parse(Request.Form[TxtTicketStartDate.ClientID]) + TimeSpan.Parse(Request.Form[TxtTicketStartTime.ClientID]);
                ticket.End = DateTime.Parse(Request.Form[TxtTicketEndDate.ClientID]) + TimeSpan.Parse(Request.Form[TxtTicketEndTime.ClientID]);
                ticket.Description = Request.Form[TxtTicketDescription.ClientID];
            }

    Premier problème :
    Plutôt que d'utiliser des Request.Form pour récupérer les données du formulaire, je préfèrerais utiliser les références directes à mes contrôles : utiliser TxtTicketName.Text plutôt que Request.Form[TxtTicketName.ClientID] ou encore Request.Form["TxtTicketName"]Comment faire ?
    Partout dans mon code ça marche, sauf à cet endroit.
    Dois-je gérer ça ailleurs ?

    Dans le BtnSearch_Click je ne me souviens plus si j'ai accès aux objets directement, mais si je tente de les remplir, ça ne fonctionne pas. Par exemple TxtPersonId contient la personne à qui est affecté le ticket (déterminé au moment de l'enregistrement), mais TxtPersonId.Text = mavaleur n'affiche rien...

    Second problème :
    Pour contourner ce souci, j'ai utilisé des Request.Form. Ca marchait bien. Jusqu'au moment où j'ai voulu utiliser un masterpage : maintenant mes noms de contrôle sont préfixés par "$ctl00$ContentPlaceHolder1$" ce qui ne correspond plus au ClientID qui est préfixé par "ContentPlaceHolder1_".

    Je ne souhaite pas écrire en dur "$ctl00$ContentPlaceHolder1$" car ça peut être sujet à changement (notamment le "00" dont j'ai aucune idée d'où il vient).
    Une idée ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Je pense que ton principal problème est de ne pas comprendre le cycle de vie d'une page en asp.net webform. (pour plus d'information voir ce site : https://msdn.microsoft.com/en-us/library/ms178472.aspx)
    tout d'abord l'initialisation de tes contrôles doit se faire au page_init (ou au page_load si tu le conditionne sur !Page.IsPostback)

    Ensuite pour récupérer les valeur encodées lors du post, tu dois le faire sur l'evenement onclick de ton bouton.

    Si tu fais cela tu pourras toujours récupérer/mettre les valeurs en utilisant les contrôle de ta page.

    Pour info, les clés du style "$ctl00$ContentPlaceHolder1$" viennent de la propriété uniqueid de tes contrôles si mes souvenirs sont bons.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/08/2008, 11h18
  2. Récupérer une variable dans une master page
    Par Assimil dans le forum ASP.NET
    Réponses: 15
    Dernier message: 24/06/2008, 13h18
  3. Réponses: 6
    Dernier message: 15/09/2006, 20h51
  4. Réponses: 10
    Dernier message: 11/03/2006, 01h51
  5. Réponses: 1
    Dernier message: 22/12/2005, 11h29

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