2010-05-05 2 views
2

ASP.NET новичок здесь. Когда на странице я хотел бы выбрать соответствующий пункт меню. Мой подход заключается в следующем: На Home.aspx.cs:Set item.выбран в элементе управления ASP.NET

Menu menu = (Menu)Master.FindControl("Menu1"); 

if (menu.Items.Count > 0) 
{ 
    menu.FindItem("Home").Selected = true; 
} 

Проблема, menu.item.count == 0. Мое меню привязано к карте сайта, если это имеет значение.

+0

В каком методе вы вызываете код, который вы указали выше? Возможно, вы звоните, прежде чем меню будет заполнено. –

+0

Код находится в режиме page_load из Home.aspx. Возможно, потому что меню привязано к sitemapdatasource, что оно еще не заселено. Я подумал об этом. Люди должны работать, но я ничего не могу найти. Я попытаюсь установить элементы без источника данных - посмотрим, как это влияет на вещи. – BillB

+0

Yup, я установил элементы в дизайнере, и они там в page_load.Значит, вы не можете это сделать, если меню связано? Возможно, что-то в объекте sitemap ... (Эти элементы управления больше работают, чем просто изучают javascript.) – BillB

ответ

4

Я думаю, что вы должны установить выбранный элемент на MenuItemDataBound событии (адаптировать свой код):

protected void Menu1_MenuItemDataBound(object sender, MenuEventArgs e) 
{ 
    if (SiteMap.CurrentNode != null) 
    { 
     if (e.Item.Text == SiteMap.CurrentNode.Title) 
     { 
      e.Item.Selected = true; 
     } 
    } 
} 

Более содержания, которое показывает, как обрабатывать ссылки в меню, которое имеет в качестве источника данных карты сайта ...

Чтобы иметь ссылку меню, построенную из Web.sitemap открыть в новом окне ...

в aSP.NET странице добавить OnMenuItemDataBound события:

<asp:Menu ID="mnuFooter" runat="server" 
DataSourceID="SiteMapDataSource1" 
OnMenuItemDataBound="mnuFooter_MenuItemDataBound"> 
</asp:Menu> 

В web.sitemap добавьте? символ в URL:

В коде позади, захватить событие MenuItemDataBound:

protected void mnuFooter_MenuItemDataBound(Object sender, MenuEventArgs e) 
{ 
    if (e.Item.NavigateUrl.Contains("?")) 
    { 
     e.Item.Target = "_blank"; 
    } 
} 

Любой URL в Web.sitemap, который содержит? откроется в новом окне. Обратите внимание, что вместо символа? если необходимо.

ASP.NET Menu Control Overview

+0

У меня есть вопрос о последующем вопросе: если я не использую карту сайта, но ratter нормальный Asp.net:menu - как я могу установить стиль элементов меню для выбранной проблемы? я хочу, чтобы стиль сохранялся, как только пользователь нажал на определенный пункт меню (чтобы создать элемент управления псевдо-вкладками) –

0

ОК, вот что я закончил с. (Спасибо, Leniel, за то, что указали мне в правильном направлении.) Следующий код находится в коде за основным файлом, содержащим элемент управления меню. Комментарии в коде показывают мое удивление, что этот элемент управления не позволяет одновременно выбирать несколько элементов. Таким образом, в многоуровневом меню я не мог отображать как выбранный текущий узел, так и его родительский элемент. (. Если я что-то отсутствует)

// This is where we set the current node's ROOT menu item's selected property to 
    // true. The current node won't show as selected, but it's parent will be. 
    // As explained elsewhere, this was a UI decision based on the fact that the menu 
    // can only have one menu item selected at a time. 
    // If the menu wasn't dataBound, this code would be in Page_Load. 
    protected void SideMenu_DataBound1(object sender, EventArgs e) 
    {   
     Menu menu = (Menu)this.FindControl("SideMenu"); // Get Menu Object 

     string parent = null; 

     // First check that there's a current node - there wont be one if the user 
     // accesses this page from a bookmark. 
     if (SiteMap.CurrentNode != null) 
     { 
      // Check if the current place in the SiteMap is in the first level of the menu 
      // or a child menu item. 
      if (SiteMap.CurrentNode.ParentNode.ParentNode != null) 
       parent = SiteMap.CurrentNode.ParentNode.Description; // It's a child - has a parent 

      if (parent == null) // a parent node 
      { 
       MenuItem item = menu.FindItem(SiteMap.CurrentNode.Description); 
       item.Selected = true; 
      } 
      else // a child menu item 
      { 
       // Get it's parent node and set it's selected property to true. 
       MenuItem item = menu.FindItem(parent); 
       item.Selected = true; 
       // Following comments left in to show how to get at 
       // a menu item that's not in the first level. The trick is the 
       // "/" separator, which is the pathSeparator property of the menu 
       // control. 

       // The menu control 
       // only allows one item to be selected at a time. This is true, even though 
       // the MenuItem class has a selected property, which implies each item 
       // can have a selected property but it's not the case. 
       //path = parent + "/" + current; 
       //MenuItem item2 = menu.FindItem(path); 
       //item2.Selected = true; 
      } 
     } 
    } 
0

Если файл Web.sitemap содержит внешние ссылки (ссылки на другие домены), то эти ссылки нужно будет начать с HTTP: // или https: //, но ваши локальные ссылки на файлы не будут - они будут просто относительными ссылками из текущего местоположения загруженного документа.

Таким образом, вам не нужно заполнять ваши URL дополнительными символами, когда нужные вам персонажи (http или https).

protected void mnuFooter_MenuItemDataBound(Object sender, MenuEventArgs e) 
{ 
    string theURL = e.Item.NavigateUrl; 
    if (theURL.Contains("http://") || theURL.Contains("https://")) 
    { 
     e.Item.Target = "_blank"; 
    } 
} 

Если у вас есть локальный файл, который вы хотите открыть в новом окне, просто измените URL из локальной ссылки на полный URL (он будет немного больше времени файла для загрузки, так как URL придется разрешить).

Смежные вопросы