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 ?
Partager