2010-05-06 7 views
5

J'espérais ouvrir un document dans un contrôle de menu en utilisant un sitemap. J'utilise le code suivant dans le sitemap, mais je reçois une erreur. Je voudrais pouvoir cliquer sur l'élément de menu, l'ouvrir dans une nouvelle fenêtre, mais ne pas faire en sorte que la page originale accède à un nouvel endroit (essentiellement pour ne rien faire sur la page principale).Comment ouvrir un document dans une fenêtre séparée à partir d'une carte de site

<siteMapNode url="javascript:window.open('Sample.doc','SampleName'); return false" title="FAQs" description="FAQs" /> 

Une idée? Y a-t-il du javascript que je ne peux pas utiliser pour enregistrer une fonction sur chaque page?

Répondre

8

Je fini par utiliser les éléments suivants:

<siteMapNode url="javascript:window.open('Sample.doc','SampleName'); void(0);" title="FAQs" description="FAQs" /> 
1
javascript:widow.open 

Etes-vous sûr de ne pas vouloir dire window.open?
Je ne pense pas que votre script soit très lié aux veuves;)

+0

Hah! Je voulais dire window.open. J'ai mis à jour ma question (ce n'était pas mon problème.) J'ai essayé tellement de choses que je me suis avaché ... merci. – Sean

1

Vous aurez besoin de savoir quel contrôle utilise le fichier sitemap, puis attraper l'événement généré à partir de ce contrôle.

0

Pourquoi ne pas simplement utiliser l'attribut cible?

<siteMapNode url="Sample.doc" target="_blank" title="FAQs" description="FAQs" /> 
+0

L'attribut cible n'est pas appliqué à la balise de lien générée par le contrôle de menu – Tevin

+0

Up a voté parce que je me demandais la même chose. Donc, la question est utile même si seulement pour l'actualisation d'une solution. –

3

Si vous gérez l'événement OnMenuItemDataBound sur le contrôle Menu ASP.NET, vous pouvez définir l'attribut cible sur l'élément là:

MyMenu.MenuItemDataBound += OnMenuItemDataBound 

private void OnMenuItemDataBound(object sender, MenuEventArgs e) 
{ 
    // Sets all menu items to open in new windows 
    e.Item.Target = "_blank"; 

    // Uses a 'target' attribute in the XML sitemap if set: 
    string targetAttributeValue = ((SiteMapNode)e.Item.DataItem)["target"]; 
    if (targetAttributeValue != null) { 
     e.Item.Target = targetAttributeValue; 
    } 
} 
0

target="_blank" sur la page source a été perdue lorsque la page a rendu pour moi. Je devais le faire dans le code derrière comme ceci:

private void Menu1_PreRender(object sender, EventArgs e) 
{ 
    if (!IsPostBack) { 
     MenuItem FAQsItem = new MenuItem("FAQs"); 
     FAQsItem.NavigateUrl = "~/Sample.doc"; //You'll need to figure out your correct URL 
     FAQsItem.Target = "_blank"; 
     Menu1.Items.Add(FAQsItem); 
    } 
} 

Note: J'ajouté à la PreRender Menu parce que je voulais juste ajouter à la fin des autres MenuItems qui se trouvaient dans la page source et fait pas besoin target="_blank".