使用StringTemplate作为ViewEngine的ASP.Net的MVC(二)

来源:互联网 发布:外包数据存储 编辑:程序博客网 时间:2024/06/05 19:32

 我的下一个步骤是建立一种观点引擎字符串模板,插入的MVC框架。 继导致的MVC团队,我延长IViewEngine和IView接口和想出了一个非常简单的问题。

我的要求 , ViewEngine如下:

  1. 模板必须缓存。
  2. 快取模板必须刷新基于文件系统的变化。 否则,发展是一个真正的痛苦。
  3. 为提高业绩,必须提供的模板的输出流,而不是产生一个可怕的字符串,得到的答复倾倒。

没想到,我知道,这些要求会更容易些,以满足比我想象。 撬拨后,各地在StringTemplate文件,我发现模板本地缓存,并利用FileSystemWatcher检测变化。 此外,该对象,使模板可以转储到一个字符串,以及一个流。 如果只有我所有的编码努力制定这样。

我不会过于深入挖掘的细节,但执行很简单。 而不是博客了,我只要让代码自己说话。 我创建了一个谷歌典项目,东道国我ViewEngine 。 随意下载和踢轮胎。

如上所述的前一页,所有的数据所需要的模板,必须建立在ViewDataDictionary之前被判决。 该ViewEngine采取一切从呼叫控制器的可视词典和填充数据容器的模板。 此外,该引擎将添加上下文的集装箱所以获得的范本。

可视对象

项目可视词典可把它们之间的美元符号。

正如你所看到的,模板引擎不关心类型或案件。 它只是要求ToString ( )的最后财产的资格,并使它。

条件语句

条件只能评价TRUE或FALSE 。 因此,你不能说这样,如果( employee.username == “ super.user ” ) ,等等,这可能看起来像是一个巨大的失踪功能,但它实际上是出色地执行模型视图分离。随着用户界面只有理解true或false ,但只有这样才能让你不硬编码身份证,价值观,和其他一般业务逻辑到您的模板。反而如果( employee.username == “ super.user ” ) ,您可以创建一个可视变量称为“ IsSuperUser “并将它设置为True 。 这样,该模板并不知道什么是“超级用户” ,但只知道把部分网页和关闭。

 


 

 

1.ViewData["IsSuperUser"] = true;

1.<div>
2.Employee Detail:
3.$if(IsSuperUser)$
4.<a href="/allowEdit">Edit</a>
5.$else
6.Editing not allowed
7.$endif$
8.</div>

迭代

您可以迭代集合位于可视。 这里的格式。

 

 

1.var employee1 = new { Id=1, Name="Joe" };
2.var employee2 = new { Id=2, Name="Sally" };
3.ViewData["employees"] = new object[] { employee1, employee2 };

1.<ul>
2.$employees:{
3.<li>$it.name$ has an ID of $it.id$</li>
4.}$
5.</ul>

 

 

原创粉丝点击