2009-11-10 7 views
0

J'ai un contrôle basé sur un modèle personnalisé (barre d'outils) qui contient un contrôle utilisateur personnalisé (bouton) Le bouton utilise jquery pour styler et gérer les états/publications/non = postbacks etc.asp.net/ajax contrôle personnalisé basé sur un modèle, affichant/masquant des éléments avec espace réservé

Certains des boutons sont masqués avec un espace réservé et sont affichés lorsque vous appuyez sur l'un des boutons.

Tous les boutons concernant jquery semblent être lancés en postback (style ajax dans un UpdatePanel en utilisant le PageRequestManager) mais l'état viewstate est perdu sur les boutons rendus invisibles par l'espace réservé.

Il semble s'agir d'un problème spécifique à viewstate et aux boutons de l'espace réservé dans le contrôle basé sur un modèle. Cela fonctionne normalement dans un environnement non-ajax, je soupçonne qu'il me manque quelque chose.

Tous les commentaires qui me font penser à apprécier.

Le code est situé dans diverses parties et probablement pas coller la peine car il sera complètement déconnecté (je sais que cette aide ne marche pas)

+0

J'ai essayé d'utiliser display: none dans un div (avec le même ID que placeholder et runat = "server") Cela fonctionne, mais je ne peux pas le faire fonctionner si le div Visible = "false" est fonctionne si les UserControls sont visibles, puis masqués. On dirait une bêta d'un catch 22. –

Répondre

1

Je sens que je dois répondre à ma propre question ici:

Au lieu d'utiliser des espaces réservés ou divs avec css, UpdatePanels sont rendus soit dans une div ou une période en fonction de l'option de rendu. Dans ce cas, masquez simplement la div ou l'étendue créée par le UpdatePanel plutôt que d'essayer de masquer/afficher un nouveau conteneur externe.

0

Si je me souviens bien, les contrôles ASP.NET ne terminent pas leur cycle de vie si ils ont l'ensemble visible à faux. Cela signifie que des choses comme Render() ne sont pas appelées, et ViewState doit être une de ces choses (ce qui est logique). L'utilisation de panneaux de mise à jour avec AJAX/Javascript est également une chose vraiment délicate, et ne fonctionne pas très bien. C'est ainsi que fonctionnent les contrôles ASP.NET et le panneau de mise à jour.

Ma suggestion consiste soit à utiliser des panneaux de mise à jour, soit à utiliser javascript, et pas les deux.

Vous pouvez facilement émuler les panneaux de mise à jour en utilisant $ .post/get de jquery et en remplaçant une section de code par le code html renvoyé par un appel de service Web.

function myButtonClick(event){ 
    $.post("path/to/webservice", {data1: "data1"}, function(data, status){ 
     $("#myPanel").replaceWith(data); 
    }); 
} 

Vous finirez par rencontrer d'autres questions aussi si vous avez un JS attaché au code qui est mis à jour via un panneau de mise à jour. Ex: Si vous avez une liste d'éléments auxquels JS leur est associé, comme l'un des contrôles ASP.NET AJAX Control Toolkit, et que vous supprimez l'un de ceux-ci de la page à l'aide d'un panneau de mise à jour, le JS les contrôles seront désynchronisés.

+0

Salut, je pense que vous avez raison sur le rendu si visible est défini sur false sur un UserControl. J'ai UpdatePanels fonctionnant bien avec jQuery, c'est juste ce show/hide problème qui provoque un peu de chagrin. Je peux résoudre ceci en utilisant javascript/jquery pour cacher les divs et dans ce cas les éléments qui doivent être visibles/cachés n'ont pas besoin d'être sécurisés autant, donc une solution css sera OK. Toujours pas idéal pour des parties plus sûres de la page qui ont besoin de se cacher. –

Questions connexes