2009-12-23 6 views
1

J'ai un contrôle personnalisé qui possède un contrôle RadioButtonList. Lorsque vous sélectionnez l'un des boutons radio, le contrôle effectue une publication pour effectuer un travail sur le serveur et la page est rechargée avec le bon bouton radio sélectionné. Cela fonctionne très bien dans ma page de test.asp.net 2.0 problème d'état d'affichage du contrôle personnalisé

J'ai maintenant déplacé le contrôle dans une page sur le site où il va vivre et quand le radiobutton est sélectionné, la publication se produit mais quand la page recharge le radiobutton n'est plus sélectionné. Il semble donc que la sélection n'est plus sauvegardée dans viewstate.

Tout pointeur sur les aspects de la nouvelle page que je devrais regarder serait très apprécié.

Vive

Adendum - un peu plus d'infos

Merci pour les conseils Stephen

Le contrôle a été développé à l'origine en tant que contrôle utilisateur Web en utilisant le concepteur, la mise en œuvre très simple, les gestionnaires de côté serveur pour charge et quand la sélection du radiobutton change. Séparez DLL pour le code derrière et un ascx. Je l'ai ensuite converti en un contrôle personnalisé pour tirer le ascx dans la DLL avec le code compilé derrière.

Je ne crée pas dynamiquement le contrôle dans la page de test, il y a un tag et un <% @ Register ... blah blah> en haut dans l'aspx pour le faire. Le radiobuttonlist a été glissé et déposé dans l'ascx en utilisant le concepteur, donc je n'ai pas implémenté le code pour le créer. Donc, tout est très vanille. Je cherche vraiment les différences que je devrais regarder dans les pages qui utilisent le contrôle, pour comprendre pourquoi cela fonctionne dans la page de test, mais pas dans la page du site où il doit résider.

* ********** Ajout *********** J'ai eu peu de temps pour résoudre ce problème et j'ai dû le remettre à un autre développeur. Quand je découvre de lui quelle est la solution, je la posterai ici. Un grand merci à tous pour leur contribution.

*********** Réponse ************* Voici la réponse du développeur qui a pris le relais.

Votre contrôle de quiz était très bien, la raison pour laquelle les valeurs n'étaient pas conservées en postback était due à la fonctionnalité héritée de la classe de base lorsque vous l'avez mise en ligne. Essentiellement, il a fait un DataBind dans la méthode de chargement de la page qui dans le cycle de vie de la page est avant que les méthodes de publication soient appelées, donc il réinitialise les valeurs des listes déroulantes. À la fin, j'ai mis en place des propriétés viewstate qui contenaient les valeurs des listes déroulantes. Donc, ce n'était pas quelque chose que vous auriez pu savoir.

+0

La page utilise-t-elle AJAX? – SLaks

+0

Non, c'est une page asp.net simple. – Rich

+0

@SLaks, si la page utilise Ajax, que dois-je rechercher? Je sais que j'ai dit que ce n'était pas le cas, mais je suis curieux car je vais avoir à faire face à ajax à nouveau tôt ou tard. – Rich

Répondre

0

obtenu une réponse du développeur qui a repris le projet ->

la raison pour laquelle les valeurs n'étaient pas retenus sur postback était

« Votre contrôle quiz était bien compagnon, en raison de la fonctionnalité héritée de la classe de base lorsque En fait, il a fait un DataBind dans la méthode de chargement de la page qui est dans le cycle de vie de la page avant que les méthodes de publication ne soient appelées, donc il réinitialise les valeurs des listes déroulantes. Donc, ce n'était pas quelque chose que vous auriez pu savoir. "

Espérons que cela aide quelqu'un.

2

Assurez-vous que votre page a

EnableViewState=True 
+0

oui, l'état d'affichage est activé. – Rich

0

dernière fois que je avais besoin ViewState pour un bouton de radio que je devais passer outre les méthodes LoadViewState et SaveViewState pour le faire fonctionner correctement.

2

Tout d'abord, ce n'est pas un problème ViewState. Viewstate est pour les changements programmatiques aux contrôles sur une page. Si vous définissez le texte d'une étiquette à quelque chose de différent de ce qui réside sur l'ASPX dans CODE BEHIND, cette valeur est stockée dans viewstate. .NET a un mécanisme (et il est contrôlé via une interface que votre contrôle doit implémenter) qui retransmet les données POST aux contrôles auxquels il appartient, ce qui se produit après le chargement de ViewState mais avant le déclenchement de l'événement Page_Load.

Maintenant, il y a un couple de différentes possibilités pour les raisons de cette:

d'abord, est ce RadioButton dans votre contrôle personnalisé étant généré à l'intérieur de la méthode CreateControls ou est-ce que votre HTML droit de contrôle est rendu? S'il s'agit d'un HTML direct, vous devez vous assurer que vous gérez les valeurs attendues à mesure qu'elles reviennent de la publication. S'il s'agit d'un contrôle serveur déclaré comme étant NOUVEAU dans votre contrôle personnalisé et n'étant pas instancié et traité dans la méthode CreateControls, vous devez l'y mvoe.

Deuxième est ce contrôle sur la page ASPX ou est-il ajouté à la page dans le code derrière. S'il est ajouté à la page dans le code derrière il est probable qu'il est ajouté après que l'analyseur .NET a fini de distribuer les données de publication. Vérifiez votre collection de formulaires pour voir si la valeur existe là.

+0

J'ai Stephen, j'ai ajouté et ajouté à la question originale qui répond à certaines des questions que vous avez posées et un peu plus. Acclamations – Rich

+0

+1 pour indiquer que ViewState n'est pas utilisé pour conserver l'état d'un contrôle entre les publications. ControlState est utilisé pour cela. – Rich

+0

Stephen/Rich, Est-ce vraiment l'état de contrôle? Les données de publication standard ne sont-elles pas renvoyées dans la demande POST? Est-ce que le contrôle radiobutton utilise l'état de contrôle dans asp.net 2.0 pour stocker l'état par opposition à asp.net 1.1? – Preets

Questions connexes