London Dev Meetup Rescheduled! Due to unavoidable reasons, the event has been moved to 21st May. Speakers remain the same—any changes will be communicated. Seats are limited—register here to secure your spot!

Help understanding MenuList

Vote:
0

Could some one please help me and explain how the MenuList in Alloy MVC templates works. As a junior developer i find it very complex.

The most confusing part is the Func<MenuItem, HelperResult> itemTemplate = null part. I cant get my head around what this parameter is when the method is called. Please help.

 @Html.MenuList(ContentReference.StartPage,
                                                   @<li class="@(item.Selected ? "active" : null)">
                                                        @Html.PageLink(item.Page, null, new { @class = string.Join(" ", item.Page.GetThemeCssClassNames())})
                                                    </li>)

public static IHtmlString MenuList(
            this HtmlHelper helper,
            ContentReference rootLink,
            Func<MenuItem, HelperResult> itemTemplate = null,
            bool includeRoot = false,
            bool requireVisibleInMenu = true,
            bool requirePageTemplate = true)
        {}

#80766
Jan 31, 2014 13:11
Vote:
0

You are not alone who finds this too over engineering :)

Anyway this is more related to C# and Mvc idioms and so much about EPiServer. In this particular case Func<TArg,TResult> is a function this may be passed in as argument to MenuList method. This function represents "some code block" that may be called later while generating menu.

In AlloyTech Func<> is actually generated by view engine - in this case Razor. In this case you are declare this helper method inline while calling to MenuList method. Is it more clear if you look at following code?

 

@helper RenderItem(HtmlHelpers.MenuItem item)
{
    <li class="@(item.Selected ? "active" : null)">
        @Html.PageLink(item.Page, null, new { @class = string.Join(" ", item.Page.GetThemeCssClassNames()) })
    </li>
}

    

and then:

@Html.MenuList(ContentReference.StartPage, RenderItem)

    

#80785
Feb 01, 2014 23:05
Vote:
0

Thank you Valdis!

 

You made it some what more clear but i still feel quite confused. :)

I'm not the person to say if this code is over engineerd or not but i think it's hard to understand and i need to practise more!

I found this link if there is any one else out there also confused: http://vibrantcode.com/blog/2010/8/2/inside-razor-part-3-templates.html

Please feel free to post links that explains this way of programming :)

 

Regards

David

#80810
Feb 03, 2014 11:20
This topic was created over six months ago and has been resolved. If you have a similar question, please create a new topic and refer to this one.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.