Ivan-Mark Debono
Ivan-Mark Debono

Reputation: 16300

How to iterate through a list in a view using RazorEngine?

I'm using RazorEngine to render views within a WebApi project. I have the following code to iterate through a list of items:

@using System.Collections.Generic;

@using MyApp;

@Model IEnumerable<Customer>

@foreach (var item in Model)
{
    <tr>
        <td>
            item.Name
        </td>
    </tr>
}

However, I get an exception:

Cannot implicitly convert type 'RazorEngine.Compilation.RazorDynamicObject' to 'System.Collections.IEnumerable'. An explicit conversion exists (are you missing a cast?)

What is the correct way to iterate through a list using RazorEngine?

Upvotes: 1

Views: 1110

Answers (1)

mason
mason

Reputation: 32694

Change

@Model IEnumerable<Customer>

to

@model IEnumerable<Customer>

It's case sensitive, when declaring the model type you should use lower case. Then you should be able to correctly iterate over your model.

Also, you should change item.Name to be @item.Name since you are referring to a variable and don't just want a literal string.

I created an MCVE with RazorEngine 3.9.0 to verify that it worked for me.

using System;
using System.Collections.Generic;
using RazorEngine;

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var template = @"
@using System.Collections.Generic;
@using MyApp;
@model IEnumerable<Customer>

@foreach (var item in Model)
{
    <tr>
        <td>
            @item.Name
        </td>
    </tr>
}
";

            var result = Razor.Parse(template, new List<Customer>
                        { new Customer { Name = "Hello World" } });
            Console.WriteLine(result);
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }

    public class Customer
    {
        public string Name { get; set; }
    }
}

Upvotes: 1

Related Questions