【问题标题】:How to iterate through a list in a view using RazorEngine?如何使用 RazorEngine 遍历视图中的列表?
【发布时间】:2016-09-15 13:21:00
【问题描述】:

我正在使用RazorEngine 在 WebApi 项目中呈现视图。我有以下代码来遍历项目列表:

@using System.Collections.Generic;

@using MyApp;

@Model IEnumerable<Customer>

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

但是,我得到了一个例外:

无法将类型“RazorEngine.Compilation.RazorDynamicObject”隐式转换为“System.Collections.IEnumerable”。存在显式转换(您是否缺少演员表?)

使用RazorEngine 遍历列表的正确方法是什么?

【问题讨论】:

  • 声明的模型类型是什么?当它看起来与您的问题完全无关时,您为什么将其标记为 Web API?
  • @mason 编辑了我的问题以反映这一点。
  • @Model 指令不应该小写吗?
  • 什么类型的对象进入视图?

标签: c# razorengine


【解决方案1】:

改变

@Model IEnumerable<Customer>

@model IEnumerable<Customer>

区分大小写,在声明模型类型时应使用小写。然后你应该能够正确地迭代你的模型。

此外,您应该将 item.Name 更改为 @item.Name,因为您指的是一个变量,而不仅仅是一个文字字符串。

我使用 RazorEngine 3.9.0 创建了一个 MCVE,以验证它是否适合我。

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; }
    }
}

【讨论】:

  • 当使用'@model'时,我得到:名称model在当前上下文中不存在。
  • @Ivan-MarkDebono 它对我有用,请参阅我在答案中编辑的示例。
  • @Ivan-MarkDebono,您使用的是哪个版本的RazorEngine
  • @Ivan-MarkDebono 您接受了,是什么解决了“当前上下文中不存在名称模型”的问题?
  • @Ivan-MarkDebono 我认为这是某些版本的 Visual Studio 中的错误。我的 cshtml 视图中也出现该错误。
猜你喜欢
  • 2011-07-17
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 2018-08-25
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多