31 votes

La case à cocher n'est pas visible sur les nœuds du contrôle TreeView lorsqu'il est déployé dans IIS.

Je suis confronté à un problème en ce qui concerne le TreeView contrôle. J'ai activé la case à cocher pour les nœuds de TreeView contrôle. Il fonctionne bien et s'affiche correctement. Mais lorsque je le déploie sur IIS, la case à cocher n'est pas visible. Elle n'est pas rendue du tout. Voici le TreeView :

<asp:TreeView id="tvExplicit"
        EnableClientScript="true"
        PopulateNodesFromClient="true"  
        ExpandDepth="0" 
        ShowLines="true" 
        ShowExpandCollapse="true"
        ShowCheckBoxes="Root"
        OnTreeNodePopulate="tvExplicit_TreeNodePopulate"
        Width="1px"
        runat="server">

    <Nodes>
    </Nodes>

  </asp:TreeView> 

Ce code fonctionne bien sur ma machine locale. Mais pas lorsqu'il est déployé sur IIS. Tout fonctionne sauf l'affichage des cases à cocher pour les nœuds Root.

Nota : Les cases à cocher ne sont pas du tout rendues en HTML. Ce n'est donc pas le CSS qui bloque, selon moi.

Mise à jour : J'ai pu comprendre que la version précédente de la page est mise en cache dans IIS et n'est pas réinitialisée même après la réinitialisation du pool APP.

2ème mise à jour : L'identifiant client des cases à cocher dans localhost est le suivant ctl00_MainContent_tvExplicitn0CheckBox , ctl00_MainContent_tvExplicitn1CheckBox etc. Cela peut donc être la raison du problème. Une autre chose que j'ai remarquée est la différence dans les ID clients générés pour les contrôles dans le localhost et dans le serveur déployé à IIS. Voici le rendu <a> qui fait partie du contrôle de l'arborescence dans les deux cas :

  1. IIS : MainContent_tvExplicitt0 , MainContent_tvExplicitt1 c'est l'ID du lien du nœud de l'arborescence
  2. LocalHost : ctl00_MainContent_tvExplicitt0 , ctl00_MainContent_tvExplicitt2 etc.

Le problème peut-il être lié à la façon dont les contrôles sont rendus dans différents environnements, à savoir mon hôte local et mon serveur IIS ? Dans l'hôte local, .Net 3.5 framework est là et dans le serveur IIS .Net 4 . Cela peut-il être dû à ceci ? client ID est différente dans les deux versions.

3ème mise à jour J'ai également changé la version du framework en .net 4 sur localhost mais cela n'a pas permis de reproduire le problème. controlRenderingCompatibilityVersion="3.5" dans le web.config. J'ai ensuite déployé le même code sur IIS, et j'ai obtenu une erreur selon laquelle controlRenderingCompatibilityVersion n'est pas une balise valide. Est-ce que cela signifie IIS ne fonctionne pas sur .net 4 Je n'ai pas accès au serveur IIS moi-même.

4ème mise à jour : L'application est configurée avec .net 4 dans IIS.

5ème mise à jour J'ai déployé le même build sur un autre serveur IIS sur différentes machines (il s'agissait de nos anciens serveurs sur lesquels notre application fonctionnait). Les cases à cocher sont visibles sur ce serveur. La version de .net framework est la même que celle du serveur qui rencontre des problèmes. J'ai demandé à l'équipe concernée de mettre à jour les mêmes paramètres que ceux de ces serveurs sur les serveurs qui rencontrent des problèmes. Cela n'a toujours pas aidé. Il semble donc qu'il s'agisse d'un problème de configuration du site Web sur les nouveaux serveurs où les cases à cocher ne sont pas visibles.

0 votes

Cela ressemble à un problème de type mime de IIS ou quelque chose comme ça, avez-vous Fiddler ou un autre type de moniteur de requête ouvert ? Obtenez-vous des 404 pour Javascript, des images ou autre chose ?

1 votes

Les CheckBox sont-elles présentes dans le HTML ? Si c'est le cas, je suppose qu'une classe CSS interfère.

0 votes

Non, les cases à cocher ne sont pas rendues en HTML. @VDWWD

8voto

Sak Points 800

Pas encore de réponse , nécessaire pour montrer les images J'ai essayé la même chose, en utilisant ce code dans l'aspx : (Je n'ai modifié aucun paramètre dans IIS, rien dans l'aspx non plus, j'ai créé une solution simple >> ajouté le treeview et déployé).

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server"> 
    <div> 
        <asp:TreeView ID="TreeTest"
            EnableClientScript="true"
            PopulateNodesFromClient="true"
            ExpandDepth="0"
            ShowLines="true"
            ShowExpandCollapse="true"
            ShowCheckBoxes="Root"
            OnTreeNodePopulate="TreeTest_TreeNodePopulate"
            Width="1px"
            runat="server"> 
            <Nodes>
                <asp:TreeNode Text="Something">
                    <asp:TreeNode Text="11"></asp:TreeNode>
                </asp:TreeNode>
                <asp:TreeNode Text="Something">
                     <asp:TreeNode Text="11"></asp:TreeNode>
                </asp:TreeNode>
                <asp:TreeNode Text="Something"></asp:TreeNode>
            </Nodes> 
        </asp:TreeView>  
    </div>
</asp:Content>

J'ai vérifié dans mon local et j'ai pu voir ça : enter image description here

Déployé dans IIS version 6.2, Windows server 2012, a pu voir ceci : enter image description here

Il doit y avoir quelque chose d'autre qui empêche les cases à cocher dans votre page. Afficher plus de code.

0 votes

Le problème est que la version précédente du code n'est pas réinitialisée à partir du cache. Le pool d'applications a été réinitialisé, toujours. @Sak

0 votes

@ubaidashraf Votre problème est toujours là ?

0 votes

Oui, le problème est toujours là @Sak

5voto

DafyddNZ Points 213

Parfois, IIS est configuré pour une version d'IE différente de votre version locale, ce qui peut entraîner des problèmes de compatibilité.

J'ajoute toujours ce qui suit à mon élément head dans mes fichiers html :

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />

Vous trouverez plus d'informations ici :

https://msdn.microsoft.com/en-us/library/jj676913(v=vs.85).aspx

0 votes

J'ai déjà un arbre dans une autre page pour laquelle je ne rencontre pas ce problème. Il est spécifique à cette page seulement après avoir été déployé sur IIS. Sur les deux pages, le code html et le code serveur sont identiques.

0 votes

Bonjour @ubaidashraf, cette autre page est-elle sur le même site web ? Sinon, avez-vous accès au serveur IIS pour vérifier quels pools d'applications les sites Web exécutent ? Ils peuvent avoir des versions différentes de .NET CLR.

0 votes

Bonjour @ubaidashraf, si vous pensez qu'il s'agit d'un problème de mise en cache, alors cet article peut vous aider : iis.net/learn/manage/managing-performance-settings/

0voto

user830154 Points 11

Si vous voulez tester si c'est le nom des contrôles et que vous utilisez du code pour créer les cases à cocher, vous pouvez définir la propriété clientid des contrôles avec lesquels vous travaillez sur Static, mettre à jour le code qui les gère pour utiliser uniquement l'id du contrôle, puis voir si le code fonctionne.

-1voto

MAHDI Points 24

Allez dans votre IE \tools \L'affichage de la compatibilité et le réglage et appuyez sur Ajouter afin d'ajouter votre URL dans la liste, puis essayez de charger votre page Web à nouveau.

J'espère que cela vous aidera

Salutations

0 votes

Non, ça n'a pas aidé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X