2009-10-30 3 views
0

Je ne suis pas un gars .Net mais j'essaie de mettre à jour un site .net existant. Essayer de mettre en place un identifiant unique pour l'étiquette du corps même si j'utilise une page maître.Définir l'ID du corps au nom de fichier actuel dans .net

<body id="<% page_name %>">

Il est évident que l'exemple ci-dessus ne fonctionne pas, mais pas tout à fait sûr s'il y a une fonction qui renvoie le nom de fichier qui peut être facilement ajouté à la masterpage il donne l'étiquette de corps de chaque page un identifiant unique » "basé sur le nom de la page.

Je voudrais ne pas avoir à définir une variable sur chaque code derrière la page, mais juste une fois sur la page maître.

Il se peut que ce soit complètement faux. En utilisant PHP, je l'ai fait un certain nombre de fois.

Fondamentalement, j'essaie d'obtenir un identifiant de corps unique pour chacune des pages du site. Cela me permettra d'utiliser CSS pour mettre en page des éléments de mise en page spécifiques.

+0

Pourquoi un nom de fichier? Cela peut causer des problèmes si vous utilisez JQuery par exemple, car il n'aime pas les points dans les identifiants. Peut-être mentionner ce que vous essayez d'atteindre avec cet ID - vous pourriez obtenir une bonne solution alternative de réponse ... – RichardOD

+0

Question mise à jour. J'ai juste besoin d'un identifiant de corps spécifique pour chaque page et je pensais que le nom du fichier serait un bon ID unique. – bgreater

Répondre

3

J'ai fait exactement ce dont vous parlez. C'est comme ça que je l'ai fait.

Ce que vous avez dans l'étiquette de corps est assez proche. C'est ce que j'ai utilisé dans le balisage de la masterpage, c'est une méthode derrière le code.

<body id="<%=SetupPageName()%>"> 

Dans le code masterpage derrière, vous avez besoin de cette déclaration en utilisant:

using System.IO; 

Fondamentalement, ce que cela ne s'obtient le nom du fichier de la page que vous allez accéder lors de l'exécution. Les méthodes suivantes permettent de saisir le nom de fichier de la page, puis d'attribuer ce nom de fichier en tant qu'identification unique à la page générée.

private string pageName = string.Empty; 

protected string SetupPageName() 
{ 
    string pageName = GetPageName(); 
    return pageName; 
} 

private string GetPageName() 
{ 
    pageName = Path.GetFileNameWithoutExtension(Request.FilePath); 
    if (pageName == "default") 
    { 
     pageName = "Default"; 
    } 
    return pageName; 
} 

Vous devriez maintenant pouvoir accéder à cet ID de corps comme vous le feriez avec n'importe quel autre type d'ID. J'ai utilisé ceci pour activer la mise en évidence de la navigation via une feuille de style. Il y a quelques étapes supplémentaires avec cela, mais vous pouvez généralement trouver ces réponses sur google.

Bonne chance et j'espère que cela vous aidera.

+0

Cela devrait le faire. Merci! – bgreater

0

Une recherche rapide sur Google m'a conduit à this page. Peut-être Request.Url est ce que vous avez besoin?

+0

System.IO.Path.GetFileName (Request.PhysicalPath) est un moyen d'obtenir le nom de fichier. – RichardOD

+0

de toute façon pour obtenir ce chemin d'accès à la page maître sans utiliser javascript – bgreater

0

Vous voudrez peut-être avoir chaque page qui utilise votre masterpage, ajouter un javascript onload à la page (bloc de script de démarrage) et que la fonction JS définira l'ID du corps. Faites en sorte que votre fonction setBodyId (txt) soit définie dans un fichier js que chaque page contient. Ou même le mettre dans la page maître. Ensuite, faites quelque chose comme ça (non testé):

En cas OnPreRender dans le behind:

ScriptManager.RegisterStartupScript(this, typeof(MyPage), "MyPage_Init", "setBodyId('MyPageaspx');", true); 

Ensuite, votre fonction JS sera comme ça (non testé):

function setBodyId(txt){ 
document.body.id = txt; 
} 

note Je pris le point sur le nom de la page pour éviter les périodes dans l'ID du corps.

0

Si vous souhaitez une solution contenue dans la page principale, ajoutez un appel de fonction onload à la balise body.

<body onload="setBodyId()"> 

Définissez cette fonction JS dans la page maître. Quelque chose comme ceci:

function setBodyId(){  
    var sPath = window.location.pathname; 
    var sPage = sPath.substring(sPath.lastIndexOf('/') + 1); 
    document.body.id=sPage; 
} 
+0

J'ai testé cela et cela fonctionne. – Sherri

0

J'utilise ceci:

<body id="<%= Path.GetFileNameWithoutExtension(Request.FilePath) %>"> 

mais ce n'est pas favorable à la réécriture d'URL.