asp.net/ajax contrôle basé sur un modèle sur mesure, affichage / masquage des éléments avec espace réservé

StackOverflow https://stackoverflow.com/questions/1706705

Question

J'ai un contrôle personnalisé basé sur un modèle (barre d'outils) qui contient un UserControl personnalisé (bouton) Le bouton utilise jquery au style et à gérer les états / postbacks / non = postbacks etc.

Quelques boutons sont cachés dans un espace réservé et sont affichées en frappant l'un des boutons.

Tous les boutons en ce qui concerne jquery semblent être initiés lors de la publication (style ajax dans un UpdatePanel utilisant le PageRequestManager) mais le viewstate est perdu sur les boutons rendus invisibles par l'espace réservé.

Il semble être un problème spécifique à l'état d'affichage et des boutons sur l'espace réservé dans le contrôle basé sur un modèle. Cela fonctionne normalement dans un environnement non-ajax, je soupçonne que je manque quelque chose.

Les commentaires qui me faire réfléchir appréciais.

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

Était-ce utile?

La solution

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 il suffit de cacher la div ou la durée que le UpdatePanel crée plutôt que d'essayer de masquer / afficher un nouveau conteneur extérieur.

Autres conseils

Si je me souviens bien, les contrôles ASP.NET ne terminent pas leur cycle de vie si elles ont VISIBLE false. Signification, des choses comme Render () ne sont pas appelés, et ViewState doit être une de ces choses (ce qui est logique). Utilisation des panneaux de mise à jour avec AJAX / Javascript est aussi une chose très difficile, et ne fonctionne pas très bien. Ceci est juste comment les contrôles ASP.NET et le travail du panneau de mise à jour.

Ma suggestion est de deux panneaux de mise à jour, ou utiliser javascript, et non à la fois.

Vous pouvez facilement imiter ce que les panneaux en utilisant la mise à jour faire de jquery .post $ / get et le remplacement d'une section de code avec 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 qui ont chacun JS qui leur sont rattachés, comme l'un des contrôles ASP.NET AJAX Control Toolkit, et vous supprimez l'un de ceux-ci à partir de la page à l'aide d'un panneau de mise à jour, la JS utilisé pour accrocher le Contrôle jusqu'à sera désynchronisés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top