Solved

Change menu programmatically

Posted on 2006-06-12
15
649 Views
Last Modified: 2012-08-14
I have a web site consisting of
- MasterPage.master containing a menu
- Web.sitemap that provides the menu items (Root (hidden), Home, RSS)
- Default.aspx containing a radio button list
- Rss.aspx

I want to change the query string of the rss feed in the menu depending on the selected item in the radio list

My project is based on http://www.codeproject.com/aspnet/ABetterSiteMapResolve.asp
I created the PageCode.cs in the Support project, added a reference to it, and changed the parent class of Default.aspx.cs.
What should be written into the overridden OnSiteMapResolve event handler? I've been experimenting a lot, but I haven't been managed to change anything in the menu.

   protected override SiteMapNode OnSiteMapResolve(SiteMapResolveEventArgs e) {
      //...
   }

The event handler is surely called, because if a throw new Exception() line is inserted before the return, the exception is thrown. But neither the caption, nor the url of the menu items change. What is the solution?
0
Comment
Question by:pallosp
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 5
15 Comments
 
LVL 12

Accepted Solution

by:
deanvanrooyen earned 500 total points
ID: 16891914
sorry I havent looked at the codeproject stuff. I  might be way off here anyway but heres something: is it a binding issue?

the reason whay I asked this is because if you use a drag drop feature of visual studio for the menu and sitemap then you will have some issues with the binding of the menu -  that is if you try and make a change then the chnage is undone by the "automatic" binding of the control to the sitemap, you have to pay attention to the page life cycle and where exactly you make the changes as they must be made after the binding occurs.

try this add this to your aspx page -  this is where I would change stuff in the menu....

   protected override void OnPreRenderComplete(EventArgs e)
    {
        this.Menu1.Items[0].ChildItems[0].Text = "test";
        this.Menu1.Items[0].ChildItems[0].NavigateUrl = "test.html";
        base.OnPreRenderComplete(e);
    }
hope this helps
0
 
LVL 9

Author Comment

by:pallosp
ID: 16892003
The menu is on the master page, so I can't access it directly.
Something is still wrong, because ((Menu)Master.FindControl("MainMenu")).Items.Count is 0.
0
 
LVL 12

Expert Comment

by:deanvanrooyen
ID: 16895846


 Menu m = (Menu)this.Master.FindControl("MainMenu");

        m.Items[0].ChildItems[0].Text = "test";
        m.Items[0].ChildItems[0].NavigateUrl = "test.html";
0
Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

 
LVL 9

Author Comment

by:pallosp
ID: 16896840
I think m.Items contains the items created by the designer, not the items from the site map data source.
Probably this is the reason of that m.Items[0] doesn't exist.
0
 
LVL 9

Author Comment

by:pallosp
ID: 16896872
I get the following error message:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

Line 101:        m.Items[0].ChildItems[0].Text = "test";
0
 
LVL 12

Expert Comment

by:deanvanrooyen
ID: 16908331
is m null? did it actually reference the menu?
0
 
LVL 9

Author Comment

by:pallosp
ID: 16909774
m is not null, m.DataSourceID is "MainMenuDS" as it should be, but m.Items is a zero long collection.
m.DataSource is null.
0
 
LVL 12

Expert Comment

by:deanvanrooyen
ID: 17100679
did you get any where?

how is the menu bound?
0
 
LVL 9

Author Comment

by:pallosp
ID: 17101037
masterpage.master:

<asp:Menu ID="MainMenu" runat="server" DataSourceID="MainMenuDS" Orientation="Horizontal" >
     <StaticMenuItemStyle HorizontalPadding="2px" />
</asp:Menu>
<asp:SiteMapDataSource ID="MainMenuDS" runat="server" ShowStartingNode="False"/>

web.sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap enableLocalization="true" xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
  <siteMapNode url="" title="Main"  description="" roles="*">
    <siteMapNode url="Default.aspx" title="Kezd&#337;lap" resourceKey="HomePage" />
    <siteMapNode url="rss.aspx" title="RSS" resourceKey="RSS" />
  </siteMapNode>
</siteMap>

The menu is bound to a SiteMapDataSource that reads the web.sitemap.
When Default.aspx is selected from the menu, I want to modify the url of the RSS link depending on the selected item of the radio button list.

Unfortunately I couldn't reach this behavior in the OnSiteMapResolve event no way.
0
 
LVL 9

Author Comment

by:pallosp
ID: 17101054
TheLearnedOne: what is the condition of refunding points?
I'm not affected because of the unlimited points, just being curious.
0
 
LVL 12

Expert Comment

by:deanvanrooyen
ID: 17103348
its a pity

the points are not the issue, why doesnt it work? I would like to know... can you load the project somewhere with just the basics of the page and code that is not working. there could be something else binding on the page that is causing some issues here.
0
 
LVL 9

Author Comment

by:pallosp
ID: 17103964
I tried to reproduce the issue in a new project, and found the difference:
Because of the Intellisense I accidentally overrode the OnPreRender method instead of OnPreRenderComplete. In OnPreRender the menu isn't already filled by the sitemap.

Microsoft's solution at http://msdn2.microsoft.com/en-us/library/ms178425.aspx is still dead, the menu remains unchanged.

Thanks
0
 
LVL 1

Expert Comment

by:Mayank_Agarwal
ID: 20811293
Hi Mate

Just checking on how diod you with this solution as i have a similar situtation where i got a home page that has two link that pass a querystring SiteID. when you click on that link it calls a master page that loads a menu depending on the querystring SiteID and on menu click it call the contents etc.
the problem that that when i select the link on the home page teh menu of the masterpage doesnt change, it shows me the same menu for all the siteID. though i have checked that the querystring is passed correctly etc.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article shows how to use the open source plupload control to upload multiple images. The images are resized on the client side before uploading and the upload is done in chunks. Background I had to provide a way for user…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
In this video, viewers will be given step by step instructions on adjusting mouse, pointer and cursor visibility in Microsoft Windows 10. The video seeks to educate those who are struggling with the new Windows 10 Graphical User Interface. Change Cu…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.

729 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question