2013-09-08 4 views
1

Существует два разных навигационных меню на странице в их собственных отдельных пользовательских настройках. Элементы меню в двух меню могут перемещаться на одни и те же страницы. В топменю есть анимация jQuery, а влево нет.Зарегистрируйте, какой якорный тэг сделал обратную передачу?

Вопрос в том, как я могу получить, какой якорный тэг в меню навигации сделал обратную передачу, когда тег привязки находится в ретрансляторе, а ретранслятор находится в usercontrol (метки привязки динамически создаются). Проблема заключается в том, что topmenu usercontrol codebehind запускается и устанавливает некоторые значения для скрытых полей, поэтому анимация jQuery будет корректно работать в верхнем меню, но при нажатии левого меню она не должна запускаться и устанавливать скрытые поля в коде верхнего списка. Поэтому мне нужно выяснить, как различать два меню.

Вот ретранслятор разметка:

<asp:Repeater runat="server" ID="RightSide"> 
     <HeaderTemplate><ul></HeaderTemplate> 
     <ItemTemplate> 
      <li data-type="<%# ((Item)Container.DataItem).HasChildren ? "dropdown" : "link" %>" class="<%# ((Item)Container.DataItem).HasChildren ? "dropdown" : "link" %>"> 
       <a href='<%# GetLink(((Item)Container.DataItem),"MenuLink") %>'><%#((Item)Container.DataItem)["MenuTitle"] %></a> 
      </li> 
     </ItemTemplate> 
     <FooterTemplate></ul></FooterTemplate> 
    </asp:Repeater> 

TopMenu .cs код:

public partial class TopMenu 
{ 
    private ID _homeId = new ID("{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}"); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     RightSide.DataSource = GetMultiList("Right side", RootItem); 
     RightSide.DataBind(); 

     ***HERE I NEED TO MAKE THE CHECK. 
     So the code below should only run if the postback came from the topmenu*** 

     var sectionItem = GetAncestorOrDefault(CurrentItem); 

     Sitecore.Data.Database context = Sitecore.Context.Database; 
     Sitecore.Data.Items.Item homeItem = context.GetItem("/sitecore/content/home"); 

     List<Item> items = new List<Item>(); 
     Sitecore.Data.Fields.MultilistField multilistField = homeItem.Fields["Right Side"]; 

     foreach (string id in multilistField) 
     { 
      Sitecore.Data.Items.Item multiItem = Sitecore.Context.Database.Items.GetItem(id); 

      if (multiItem.HasChildren) 
      { 
       items.Add(multiItem); 
      } 
     } 

     foreach (Item item in items) 
     { 
      if (item.Name.Equals(sectionItem.Name)) 
      { 
       hiddenAttr.Value = sectionItem.Name; 
       break; 
      } 
      else 
      { 
       hiddenAttr.Value = String.Empty; 
      } 
     } 
    } 
} 

Я попытался с EventTarget, но всегда пустой, а также со скрытым полем, значение которого всегда «» в коде. У меня нет идей ...

При необходимости отправьте больше кода.

Заранее благодарен!

Орвар

+0

вы пытались __doPostBack ?? – Ankit

+0

Я попробую и вернусь к вам. Благодаря! –

+0

@Ankit Это не работает. Я получаю uncaught typeerror: невозможно прочитать свойство '__ eventtarget undefined. Я подозреваю, что это связано с тем, что мой якорный тэг находится в репитере. Я не уверен, где я должен поставить свою функцию __doPostBack ... –

ответ

1

Вы перезаписывать все значения в постбэка. (! IsPostBack) Заверните код, если {} для данных ретрансляторов связывания:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     RightSide.DataSource = GetMultiList("Right side", RootItem); 
     RightSide.DataBind(); 
    } 
    else 
    { 
    // ***HERE I NEED TO MAKE THE CHECK. 
     // So the code below should only run if the postback came from the topmenu*** 

     var sectionItem = GetAncestorOrDefault(CurrentItem); 

     Sitecore.Data.Database context = Sitecore.Context.Database; 
     Sitecore.Data.Items.Item homeItem = context.GetItem("/sitecore/content/home"); 

     List<Item> items = new List<Item>(); 
     Sitecore.Data.Fields.MultilistField multilistField = homeItem.Fields["Right Side"]; 

     foreach (string id in multilistField) 
     { 
      Sitecore.Data.Items.Item multiItem = Sitecore.Context.Database.Items.GetItem(id); 

      if (multiItem.HasChildren) 
      { 
       items.Add(multiItem); 
      } 
     } 

     foreach (Item item in items) 
     { 
      if (item.Name.Equals(sectionItem.Name)) 
      { 
       hiddenAttr.Value = sectionItem.Name; 
       break; 
      } 
      else 
      { 
       hiddenAttr.Value = String.Empty; 
      } 
     } 
    } 
} 

Кроме того, я предложил бы использовать параметр запроса в теге. Если HREF является "/MyContent/MyPgae1" вы можете изменить его на "/MyContent/MyPgae1?s=r" и в постбэка:

if (!IsPostBack) 
     { 
      RightSide.DataSource = GetMultiList("Right side", RootItem); 
      RightSide.DataBind(); 
     } 
     else 
     { 
      if(Request.QueryString["s"] == "r") 
      { 
       //request is from rightmenu 
      } 
+0

Спасибо большое! это фактически решило мою проблему. Я очень благодарен вам за помощь! –