2011-06-21 48 views
0

我試圖使用Nustache,以便我可以在ASP.Net Web應用程序中的後端和前端代碼之間共享渲染模板。當我將一個對象傳遞給一個模板時它工作的很好,但我無法弄清楚如何讓它呈現一個集合。所以,如果我有這樣的一個模板:如何使用Nustache呈現對象集合?

{{#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
  • 使用字典詞典 - 所以每個產品本身上面

它呈現在所有東西的唯一方法命名屬性的字典是,如果我用一個匿名類,但我不能讓它填充模板與我所做的任何事物相關。我相信我在這裏錯過了一些相當明顯的東西,因爲我認爲這應該是直截了當的,但文檔說'查看代碼和測試',但我無法確定哪個測試實際處理這種情況。有人可以指出我正確的方向,還是提供一些示例代碼?

回答

7

我能得到這個工作,下面的類和控制器動作:

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 = "[email protected]" }, 
     new Person { Name = "Bob Becker", Email = "[email protected]" }, 
     new Person { Name = "Charles Charles", Email = "[email protected]" } 
    }; 

    ViewData["People"] = people; 

    ViewResult viewResult = View(); 
    viewResult.ViewEngineCollection = new ViewEngineCollection { new NustacheViewEngine() }; 

    return viewResult; 
} 

然後Index.nustache:

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

注意,我把從Nustache回購的最新變化今天早上。

+0

好的,謝謝 - 這將是多麼容易轉化爲標準的ASP.Net?我想我可以嘗試創建一個'ViewData'對象? – robertc

+0

我得看看它。我只使用Nustache和MVC,但我不確定它是如何依賴MVC的功能,如ViewData。 – gram

+1

我定義了一個像這樣的字典對象:'var RenderItems = new Dictionary >();'然後用鍵傳遞我的列表,並且工作:) – robertc

相關問題