如何使用Nustache渲染对象集合

本文关键字:对象 集合 何使用 Nustache | 更新日期: 2023-09-27 17:59:56

我正在尝试使用Nustacke,这样我就可以在ASP.Net web应用程序的后端和前端代码之间共享渲染模板。当我只是将对象传递给模板时,它工作得很好,但我不知道如何让它渲染集合。所以如果我有一个这样的模板:

{{#RenderItems}}
  <th data-warning="{{WarningLevel}}" data-limit="{{LimitLevel}}">{{TotalHours}}</th>
{{/RenderItems}}

然后我想传入一个对象集合,得到一组th元素。

我尝试过的东西:

  • 创建一个具有属性WarningLevelLimitLevelTotalHours的类,将对象添加到List并直接传递:Nustache.Core.Render.FileToString(System.Web.HttpContext.Current.Server.MapPath("my.template"), ListOfObjects)
  • 做同样的事情,除了创建一个匿名类:Nustache.Core.Render.FileToString(System.Web.HttpContext.Current.Server.MapPath("my.template"), new { RenderItems = ListOfObjects})
  • 使用包含相同对象的Dictionary而不是列表
  • 使用字典的字典-因此每个项目本身就是一个具有上述属性的字典

它呈现任何东西的唯一方法是,如果我使用一个匿名类,但无论我做什么,我都无法让它用命名项填充模板。我确信我在这里遗漏了一些相当明显的东西,因为我认为这应该很简单,但文档中说"查看代码和测试",但我无法确定哪个测试真正处理这种情况。有人能为我指明正确的方向吗,或者提供一些示例代码吗?

如何使用Nustache渲染对象集合

我能够通过以下类和控制器操作来实现这一点:

public class Person {
    public string Name { get; set; }
    public string Email { get; set; }
}
public ActionResult Index() {
    var people = new List<Person>() { 
        new Person { Name = "Albert Adams", Email = "albert@email.com" },
        new Person { Name = "Bob Becker", Email = "bob@email.com" },
        new Person { Name = "Charles Charles", Email = "charles@email.com" }
    };
    ViewData["People"] = people;
    ViewResult viewResult = View();
    viewResult.ViewEngineCollection = new ViewEngineCollection { new NustacheViewEngine() };
    return viewResult;
}

然后是Index.ustache:

{{#People}}
    <p>{{Name}} - {{Email}}</p>
{{/People}}

请注意,我今天早上从Nustache回购中提取了最新的变化。