web-dev-qa-db-fra.com

Comment accéder à l'entrée de formulaire HTML à partir de code asp.net derrière

J'ai un formulaire HTML de base qui est inséré dans une balise div côté serveur en fonction du nombre d'enregistrements existant dans la base de données. Ce formulaire HTML est très bien, et tout semble bien. Mais sur ma page d'action, il semble que je ne puisse pas accéder aux éléments d'entrée du code précédent. J'ai essayé d'utiliser la portée de la requête mais je n'ai rien trouvé avec cette approche. D'autres suggestions?

Toutes les suggestions ci-dessous sont excellentes et c'est normalement ce que je ferais. Mais ces formulaires sont construits à la volée après la compilation de la page, donc runat = 'serveur' n'a rien fait pour moi. Il vient de transmettre cela à la page html.

33
user18411

Si vous accédez à un formulaire HTML simple, il doit être soumis au serveur via un bouton d'envoi (ou via une publication javascript). Cela signifie généralement que votre définition de formulaire ressemblera à ceci (je m'écarte de la mémoire, assurez-vous de vérifier que les éléments HTML sont corrects):

<form method="POST" action="page.aspx">

<input id="customerName" name="customerName" type="Text" />
<input id="customerPhone" name="customerPhone" type="Text" />
<input value="Save" type="Submit" />

</form>

Vous devriez pouvoir accéder aux données customerName et customerPhone de la manière suivante:

string n = String.Format("{0}", Request.Form["customerName"]);

Si tu as method="GET" dans le formulaire (non recommandé, cela gâche votre espace URL), vous devrez accéder aux données du formulaire comme ceci:

string n = String.Format("{0}", Request.QueryString["customerName"]);

Cela ne fonctionnera bien entendu que si le formulaire a été "Posté", "Soumis" ou rempli via un "Postback". (c.-à-d. que quelqu'un a cliqué sur le bouton "Enregistrer", ou cela a été fait par programme via javascript.)

N'oubliez pas non plus que l'accès à ces éléments de cette manière ne peut être effectué que si vous n'utilisez pas les contrôles du serveur (c'est-à-dire que runat="server"), avec les contrôles de serveur, l’ID et le nom sont différents.

66
Bryan Rehbein

Ce que je suppose, c'est que vous devez définir ces éléments d'entrée sur runat = "server".

Donc, vous ne pourrez pas accéder au contrôle

<input type="text" name="email" id="myTextBox" />

Mais vous pourrez travailler avec

<input type="text" name="email" id="myTextBox" runat="server" />

Et lisez-le en utilisant

string myStringFromTheInput = myTextBox.Value;
21
Bjorn Verryt

Cela devrait normalement être fait avec Request.Form["elementName"].

Par exemple, si vous avez <input type="text" name="email" /> alors vous pouvez utiliser Request.Form["email"] pour accéder à sa valeur.

9
Gant

Le moyen le plus simple IMO consiste à inclure un identifiant et une balise de serveur runat sur tous vos éléments.

<div id="MYDIV" runat="server" />

Comme il semble que ces commandes soient des commandes insérées dynamiquement, vous pourriez apprécier FindControl ().

2
rlb.usa

Puisque vous utilisez asp.net code-behind, ajoutez un identifiant à l'élément et runat = server.

Vous pouvez ensuite référencer les objets dans le code derrière.

0
Eppz