0

我正在尝试使用Nustache,以便可以在 ASP.Net Web 应用程序中的后端和前端代码之间共享渲染模板。当我只是将一个对象传递给模板时它工作正常,但我不知道如何让它呈现一个集合。因此,如果我有这样的模板:

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

然后我想传入一组对象并取出一组th元素。

我尝试过的事情:

  • 创建一个具有属性的类WarningLevel,LimitLevelTotalHours,将对象添加到 aList并直接传递它: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包含相同对象的
  • 使用字典字典 - 所以每个项目本身就是具有上述属性的字典

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

4

1 回答 1

8

我能够使用以下类和控制器操作来实现它:

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.nastache:

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

请注意,我今天早上从 Nustache 存储库中提取了最新更改。

于 2011-06-21T13:52:29.427 回答