Как открыть документ в отдельном окне с карты сайта

Я надеялся открыть документ в элементе управления меню с помощью карты сайта. Я использую следующий код в карте сайта, но получаю сообщение об ошибке. Я хотел бы иметь возможность щелкнуть элемент меню, открыть образец документа в новом окне, но не чтобы исходная страница переходила в новое место (по сути, чтобы ничего не делать на главной странице).

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

Есть идеи? Есть ли какой-нибудь javascript, который я могу использовать, чтобы не регистрировать функцию на каждой странице?


person Sean    schedule 06.05.2010    source источник


Ответы (6)


В итоге я использовал следующее:

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

Если вы обрабатываете событие OnMenuItemDataBound в элементе управления меню ASP.NET, вы можете установить целевой атрибут для элемента:

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;
    }
}
person Tevin    schedule 07.04.2014

javascript:widow.open

Вы уверены, что не имеете в виду window.open?
Я не думаю, что ваш сценарий так сильно связан с вдовами ;)

person Sune Rasmussen    schedule 06.05.2010
comment
Ха! Я имел в виду window.open. Я обновил свой вопрос (это была не моя проблема). Я пробовал так много вещей, что у меня получилось небрежно... спасибо. - person Sean; 06.05.2010

Вам нужно будет выяснить, какой элемент управления использует файл карты сайта, а затем перехватить событие, сгенерированное этим элементом управления.

person azamsharp    schedule 06.05.2010

Почему бы просто не использовать целевой атрибут?

<siteMapNode url="Sample.doc" target="_blank" title="FAQs"  description="FAQs" />
person Stephen    schedule 17.08.2012
comment
Атрибут target не применяется к тегу ссылки, сгенерированному элементом управления меню. - person Tevin; 07.04.2014
comment
Проголосовал за это, потому что мне было интересно то же самое. Так что вопрос полезен хотя бы для дисконтирования решения. - person John Deverall; 10.11.2014

target="_blank" на исходной странице был потерян, когда страница отображалась для меня. Мне пришлось сделать это в коде так:

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

Примечание. Я добавил это в PreRender меню, потому что я просто хотел добавить его в конец других элементов меню, которые были на исходной странице и не нуждались в target="_blank".

person Tony L.    schedule 04.03.2016