Solved

MVC Razor how to loop through nested data?

Posted on 2014-02-07
3
2,783 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
  • 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

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

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

Just a quick little trick I learned recently.  Now that I'm using jQuery with abandon in my asp.net applications, I have grown tired of the following syntax:      (CODE) I suppose it just offends my sense of decency to put inline VBScript on a…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…

808 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