2008-10-22 8 views

Répondre

3

Une autre chose que vous pouvez faire est de référencer la page principale via la page de contenu lui-même.

Pour le rendre plus facile sur moi-même, je crée une méthode accessible au public dans la page maître lui-même:

Public Sub SetNavigationPage(ByVal LinkName As String) 
    DirectCast(Me.FindControl(MenuName), HyperLink).NavigateUrl = "help.aspx#" & LinkName 
End Sub 

Puis, dans la page de contenu, je reçois une référence à la page principale par ce qui suit ...

Dim myMaster As MasterPageClass = DirectCast(Me.Master, MasterPageClass) 
myMaster.SetNavigationPage("CurrentPage") 
+0

Mon seul problème avec cette solution est qu'il vous faudrait mettre le code plaque de chaudière dans chaque page de contenu. Je perdrais une solution qui pourrait être écrite entièrement dans la page maître. – JPrescottSanders

+0

Nice ... alors que je suis d'accord avec JPrescottSanders que cela pourrait exiger beaucoup de code, vous venez d'enregistrer ma journée sur une autre tâche. 1 point pour cela ;-) –

+0

Il convient de noter que vous pouvez maintenant déclarer le type dans l'en-tête de la page ASPX avec la balise suivante: <% @ MasterType TypeName = "MYMaster.MasterPage"%>. Page.Master expose toutes les options. –

1

Je n'ai pas écrit une ligne de C# depuis plus de trois mois, mais vous pouvez connecter un événement dans la page maître (OnLoad) et définir le lien à partir de là. Voir ce qui est dans le ContentPlaceholder qui est votre page principale et obtenir son type ou son nom, puis l'appliquer au lien.

1

Je voudrais utiliser "Request.PhysicalPath" pour obtenir le chemin physique qui a été demandé, puis dans votre aide HMTL vous pouvez indiquer les sections par leur page.

Vous pouvez aller aussi loin que d'utiliser:

Path.GetFileName(Request.PhysicalPath).ToUpper() 

pour normaliser les données. L'utilisation de PhysicalPath vous permet d'avoir toute la logique dans la page maître; ce qui éliminerait le besoin d'écrire du code dans toutes les pages de contenu. Juste ma préférence.

+0

Cest gentil (tho j'opterais pour ToLower()), mais il ne vous donne pas accès à la page ou ses propriétés, etc juste un nom de fichier qui est très probablement le même que le nom de classe (serait beaucoup en 99.99 % de tous les cas probablement) – Kris

+0

Je ne pense pas que vous ayez besoin d'accéder aux propriétés de la page, ce que j'aime à son sujet, c'est que vous écrivez la logique dans la page maître, puis toutes les pages qui utilisent ce maître. Vous n'auriez pas à mettre de la logique dans chaque page de contenu. – JPrescottSanders

1

Mettre

<a href="help.aspx#<%= Path.GetFileName(this.Page.Request.FilePath) %>">Help</a> 

dans le MasterPage, puis ancres sur la page d'aide en le format:.

<a name="page1.aspx" />Blah, blah 
<a name="page2.aspx" />Blah, blah 

Si vous répétez les noms de page dans les sous-dossiers, par exemple, Sub1/page1.aspx et Sub2/page1.aspx - vous devrez être un peu plus intelligent.

Questions connexes