2010-10-28 5 views
0

J'ai un formulaire qui est généré dynamiquement. le plan est de le générer, l'utilisateur d'entrer des données, puis d'enregistrer tout ce lot. bien qu'une légère variation à ceci est si le formulaire a des données antérieures qui lui sont associées, puis il charge dans tous pré-rempli. - L'utilisateur peut alors modifier les sélections précédentes.généré dynamiquement formulaire comment enregistrer réellement les données entrées

et c'est le frotte vraiment, je sais si j'appelle generateform indépendamment de la publication, viewstate devrait prendre le relais et se rappeler ce que les paramètres weer .. mais comme la méthode generateform comme mentionné ci-dessus remplit le formulaire si le formulaire a été précédemment enregistré. qui va gagner, le viewstate ou la méthode generateform pour les populations de terrain ..?

grâce

nat

Répondre

2

Si vous générez dynamiquement des contrôles de formulaire qui affichent des données ou causer un postback, vous devez les recréer à nouveau sur postback afin qu'ils soient liés à leurs données, ou leur événements, après la publication. Conceptuellement, cela a du sens. Si vous n'avez pas de contrôle dans votre formulaire après la publication, comment pouvez-vous regarder son contenu?

Il existe plusieurs façons d'aborder ce problème.

1) Appelez GenerateForm() quoi qu'il arrive. Puisque vous avez dit qu'il pré-remplit certaines des données, vous devrez le changer afin qu'il puisse être appelé sans le faire. ASP.NET remplira les contrôles avec les données postées automatiquement sur la publication, ce que vous voulez.

2) Conservez une liste de tous vos contrôles générés dynamiquement dans une variable ViewState, afin de pouvoir les générer de nouveau au moment de la publication. Pour la plupart des situations impliquant des contrôles créés dynamiquement qui ne sont pas très simples (par exemple, vous ne savez peut-être pas exactement quels contrôles sont générés), c'est la meilleure solution. Et souvent, vous voudrez être en mesure d'accéder aux données après une publication, mais peut-être que vous ne voulez vraiment pas recréer le formulaire entier parce que vous ne l'utilisez plus.

Tant que vous recréerez un contrôle de même type et ID sur ou avant Page_Load(), il sera lié aux données publiées. Il n'a pas besoin d'être exactement au même endroit sur votre formulaire. Et il n'a pas besoin d'être utilisé ou affiché, non plus - vous pouvez le détruire avant que le formulaire ne soit rendu, par exemple, Page_PreRender()

3) Si cela ne vous intéresse pas, vous pouvez toujours utiliser Request.Form pour regarder directement les données publiées, même si cela peut également être difficile car les noms ne correspondront probablement pas exactement à vos identifiants de contrôle de formulaire. ASP.NET génère des ID côté client uniques qui dépendent du conteneur, et c'est ce que vous trouverez dans Request.Form. Si vous ne régénérez pas un contrôle, il se peut que vous ne puissiez pas déterminer facilement l'ID que vous recherchez. Généralement, vous ne devriez pas faire cela, mais c'est un moyen de regarder les données publiées et parfois vous en avez besoin.

Questions connexes