2010-05-06 9 views
5

Ich hatte gehofft, ein Dokument in einem Menü-Steuerelement mithilfe einer Sitemap zu öffnen. Ich verwende den folgenden Code in der Sitemap, erhalte aber einen Fehler. Ich möchte in der Lage sein, auf den Menüeintrag zu klicken, das Beispieldokument in einem neuen Fenster öffnen zu lassen, aber die Originalseite nicht zu einem neuen Ort navigieren zu lassen (im Wesentlichen nichts auf der Hauptseite zu tun.)So öffnen Sie ein Dokument in einem separaten Fenster von einer Sitemap

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

Irgendeine Idee? Gibt es Javascript, das ich verwenden kann, das erfordert nicht, dass ich eine Funktion auf jeder Seite registriere?

Antwort

8

Ich landete mit dem folgenden:

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

Sind Sie sicher, dass Sie nicht meinen window.open?
Ich glaube nicht, dass Ihr Skript so viel mit Witwen verwandt ist;)

+0

Hah! Ich meine Fenster.offen. Ich habe meine Frage aktualisiert (das war nicht mein Problem.) Ich habe so viele Dinge versucht, die ich schlampig bekommen habe ... danke. – Sean

1

Sie müssen herausfinden, welche Steuerelement die Sitemap-Datei konsumiert und dann fangen Sie das Ereignis von diesem Steuerelement generiert.

0

Warum Attribut nicht nur das Ziel verwenden?

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

Das Zielattribut wird nicht auf das Verknüpfungs-Tag angewendet, das vom Menüsteuerelement – Tevin

+0

generiert wird. Ich habe das gewählt, weil ich mich gefragt habe, was das gleiche ist. Die Frage ist also nützlich, wenn auch nur um eine Lösung zu diskontieren. –

3

Wenn Sie das OnMenuItemDataBound Ereignis auf der ASP.NET Menüsteuerung umgehen, können Sie das Zielattribut auf den Punkt gesetzt dort:

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" auf der Quellseite verloren ging, als die Seite gerendert für mich. Ich hatte es in dem Code wie so hinter sich zu tun:

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); 
    } 
} 

Anmerkung: Ich habe diese auf die PreRender Menü, weil ich es nur bis zum Ende der anderen MenuItems hinzufügen wollte, die in der Quellseite waren und taten nicht brauchen target="_blank".