Solved

MVC Razor how to loop through nested data?

Posted on 2014-02-07
3
2,882 Views
Last Modified: 2014-02-07
Hi,

I have a data structure with nested location objects and in every level of the loction object is it possible to have resources assigned.

[u]Location-Object[/u]
Id
ParentLocation
LocationName

[u]Resource-Object[/u]
Id
LocationId
ResourceName



--Location
  -- Location
    -- Resource
    -- Resource
-- Location
  -- Resource

Open in new window


Now I would like to render it using RAZOR in a nested way. Normally I would use recursive methods for it. But I don't think that's possible with RAZOR

what is the best practice for something like this?
0
Comment
Question by:HugoHiasl
[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
  • 2
3 Comments
 
LVL 75

Accepted Solution

by:
käµfm³d   👽 earned 500 total points
ID: 39842170
Why not create a Razor helper that can process this for you?

e.g.

@model IEnumerable<Location>

@using MvcApplication22.Models

@helper RenderLocations(IEnumerable<Location> locations)
{
    foreach (Location location in locations)
    {
        @RenderLocation(location);
    }
}

@helper RenderLocation(Location location)
{
    <div>
        <div>@location.LocationName</div>

        <ul>
        @foreach (var subLocation in location.Locations)
        {
            <li>@RenderLocation(subLocation)</li>
        }
        </ul>

        <ul>
        @foreach (var resource in location.Resources)
        {
            <li>@RenderResource(resource)</li>
        }   
        </ul>         
    </div>
}

@helper RenderResource(Resource resource)
{
    <div>@resource.ResourceName</div>
}

<div>@RenderLocations(Model)</div>

Open in new window


Helpers are just bits of re-usable code that pack neatly into your view (or you can break them out into a separate class that your view can reference). They are useful for complicated rendering scenarios like what you are facing here.

More Info:
http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx
http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-helpers,-forms-and-validation
0
 
LVL 12

Author Closing Comment

by:HugoHiasl
ID: 39842227
The @helper and @functions keywords were the part that I did not know... I am fairly new to MVC... Thanks.
0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 39842242
Normally, once you are inside a Razor block you don't need to prefix your code with an @. However, in my testing (and research) I found that when you call one helper from another you need to prefix the call with the @. This is why lines 9, 21, and 28 have the leading @.
0

Featured Post

Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

Question has a verified solution.

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

IntroductionWhile developing web applications, a single page might contain many regions and each region might contain many number of controls with the capability to perform  postback. Many times you might need to perform some action on an ASP.NET po…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

697 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