Ajouter de nouveaux contrôles serveur ASP.NEt avec jQuery?

J’ai un ensemble de champs qui sont répétés sur un formulaire. Ils sont simplement 3 zones de saisie. J’ai un lien au bas de l’ensemble qui dit “Ajouter plus.” Lorsque je clique dessus, j’utilise .append () dans jQuery pour écrire une nouvelle ligne de champs de saisie (et leur atsortingbuer un nom unique). Le problème est que j’ajoute des champs HTML, pas des contrôles serveur ASP.NET.

Comment est-ce que j’accède à ces derniers dans mon code derrière puisqu’ils ne sont pas vus sur le formulaire jusqu’à l’exécution (c’est-à-dire, dans le navigateur)?

-Chris

C’est fondamentalement impossible.

jQuery fonctionne uniquement sur le client, alors que les contrôles côté serveur ASP.Net existent principalement sur le serveur.

Au lieu de cela, vous pouvez communiquer avec le code côté serveur à l’aide de jQuery en plaçant les informations dans des champs cachés.

Pensez à passer à ASP.Net MVC, qui est bien meilleur pour ce genre de chose.

Oui, vous pouvez le faire!

Eh bien, vous ne pouvez pas vraiment append de “contrôles de serveur”, mais vous pouvez certainement append des zones de saisie côté client, les poster et lire leurs valeurs côté serveur.

Supposons que vous ajoutiez le côté client d’entrée suivant:

  

L’entrée et sa valeur seront envoyées dans la requête au serveur. Par conséquent, le code côté serveur permettant d’y accéder serait:

 ssortingng value = Request.Form["textbox_name"]; 

Comme l’a dit SLaks, c’est fondamentalement impossible. Toutefois, une solution de contournement consisterait à “compresser” tous vos champs dynamics en un champ masqué qui est lui-même un contrôle ASP.NET. Par exemple, vous pouvez définir un gestionnaire d’envoi de formulaire dans jQuery qui sérialiserait vos champs de formulaire dynamics dans une chaîne JSON et définirait votre champ masqué ASP.NET sur cette valeur. De toute évidence, votre back-end devrait le désérialiser et le traiter en conséquence, tout comme votre front-end lorsque vous chargez la page.

Vous pouvez le faire de différentes manières. Je suppose que par “3 zones de saisie”, vous voulez dire 3 contrôles TextBox :

  1. Ajoutez d’autres contrôles TextBox pour commencer dans le balisage et masquez ceux qui restnt jusqu’à ce que l’utilisateur clique sur “Ajouter plus”. Cela conviendrait s’il existe une limite supérieure raisonnable au nombre de contrôles que l’utilisateur doit être autorisé à append.

  2. Avant la publication, prenez les valeurs des contrôles nouvellement ajoutés et placez-les dans un champ masqué. Le serveur pourra lire les valeurs à partir de là.

  3. Communiquez les valeurs des contrôles au serveur via AJAX.

Je suis sûr qu’il existe d’autres moyens d’y parvenir, mais je pense que l’un de ces trois va travailler pour vous.