2015-03-11 2 views
0

Si j'ai un espace réservé qui ressemble à ceci:Existe-t-il un moyen d'empêcher l'ID du titulaire de contenu d'affecter les ID enfants dans ASP.NET?

<asp:contentplaceholder ID="Body" runat="server"></asp:contentplaceholder> 

Et à l'intérieur de celui-ci sont d'autres éléments qui sont runat="server" avec des propriétés d'identité, puis-je obtenir quelque chose comme ceci:

<span id="Body_T966DB943018"> 
    <div id="Body_T966DB943007_ctl00_ctl00_main"></div> 
</span> 

est-il un moyen de mettre en place ma contentplaceholder telle que la sortie apparaît comme ceci:

<span id="T966DB943018"> 
    <div id="T966DB943007_ctl00_ctl00_main"></div> 
</span> 

(remarquez l'absence du « Body_ » dans tous les ID générés)


Si vous voulez savoir pourquoi je demande ...

J'utilise Sitefinity. Par défaut, vous pouvez configurer des modèles dans une interface graphique principale. C'est ainsi que le site a été construit à l'origine.

La dernière structure HTML est la façon dont le CMS a généré des modèles sur la page. La construction initiale de CSS et JS utilisait ces ID générés. Maintenant, nous avons ajouté un fichier modèle maître, et nous devons mettre un contentplaceholder par défaut pour le contenu de Sitefinity.

Je dois trouver un moyen d'avoir cet espace réservé par défaut (ci-dessus avec ID="Body" pour ne pas affecter les ID de ses enfants.

+1

Vous pouvez définir la propriété '' ClientIDMode' à Static' pour chaque contrôle enfant (en supposant que vous n » t avoir un doublon). [MSDN] (https://msdn.microsoft.com/fr-fr/library/system.web.ui.control.clientidmode%28v=vs.110%29.aspx) –

+0

@AdrianoRepetti - Je regardais juste cette propriété .. Malheureusement, il existe des centaines de contrôles enfants, et ils sont tous générés automatiquement par le CMS, donc ce n'est pas une option. – tmsimont

+0

Je ne sais pas si j'ai une bonne compréhension de la situation ici, mais est-ce quelque chose où vous pouvez réellement écrire le code HTML par programme (c'est-à-dire: le vieux chemin ASP classique)? – Steve

Répondre

0

Si vous voulez changer le comportement de l'ensemble du site, vous pouvez le faire en web.config en réglant le ClientIDMode.

<configuration> 
    <system.web> 
    <pages clientIDMode="Static" /> 
    </system.web> 
<configuration> 

Ou au niveau de la page.

<%@ Page ClientIDMode="Static" %> 

Ou au niveau du contrôle individuel.

<asp:Label runat="server" ClientIDMode="Static" /> 

Gardez à l'esprit que vous aurez besoin que votre ID client de sont uniques pour éviter les conflits.

+0

J'ai toujours besoin que les enfants soient "Hériter" - ils sont générés automatiquement par un CMS, et j'ai besoin de leur ID à suivre le motif qu'ils semblent suivre quand je ne mets pas le mien.modèle de fichier maître. (Je ne peux pas voir ce que c'est, car il est caché dans la base de code du logiciel propriétaire) – tmsimont

+0

@tmsimont Je ne pense pas que vous pouvez le définir spécifiquement pour un parent mais ne pas le faire affecter les enfants. Les enfants hériteront toujours, mais ils hériteront du parent. Cela signifie que si vous changez de parent, les enfants vont changer. – mason

+0

Oui, cela semble être le cas. Je viens de l'essayer et les enfants sont également affectés. Je suis totalement perplexe. Je ne sais pas comment le CMS le fait. Il semble qu'ils aient créé leur propre extension PlaceHolder nommée SitefinityPlaceHolder à utiliser à la place de ContentPlaceHolder, mais lorsque j'essaie de l'utiliser dans mon fichier .master, j'obtiens une erreur: "Impossible de trouver un espace approprié pour le contrôle requis." – tmsimont

1

Il serait préférable de refaire votre CSS et plus approprié que vous pouvez le voir, il est très difficile de maintenir ces Ids

+0

En plus de CSS, il peut y avoir JS aussi. Et s'il s'agit d'un système de gestion de contenu, il peut ne pas être simple de les modifier. – mason

+0

Je me dirige actuellement dans cette direction maintenant. Le problème est, comme le fait remarquer Mason, que CSS et JS sont parfois dans le CMS, donc j'essaie de comprendre dans quelles tables DB peuvent cacher JS et CSS ... – tmsimont

+0

Sitefinity n'utilise pas ces Ids pour tout JS but que j'ai jamais vu. –