由于是边学边开发,经常遇到一些问题,google一下,多数问题能从园子里找到答案,但也有些低级的问题始终找不到,因此想在这里记下对这些问题的处理,很零散,不是系统讲解。
1、Nvelocity模板中取到空值时,会直接输出模板的内容,如$row.Email,如果Email为null,输出为$row.Email,一直使用#if($row.Email) $row.Email #end这种方法来处理,后来发现原来可以使用$!Row.Email这种语法,注意,是在$后加一个感叹号,这样在内容为空时,就不输出内容了。
2、模板中可以直接使用.Net的类库及类的方法,如,要在页面中显示一个当前时间,可以直接写$DateTime.Now,就会显示当前的时间。
3、输出乱码。有很多人介绍使用模板的属性文件,我反复试验,仍然乱码,最后发现其实根本不是这个原因,NVelocity是可以正常输出汉字的,只要编码是UTF8即可,不需要使用模板的初始化属性文件。我碰到的问题是由于模板、layouts两个文件的编码方式不致造成的,.net的默认编码是utf-8,只要所有文件的保存格式都统一为utf-8,并且去掉关于游览器页面语言控制的代码,就可以保证输出不乱码了。而网上下载的例子Layouts中文件的默认编码不是UTF8。
4、在#foreach输出的表格中增加序号列。#foreach有一个计数变量,名字叫$velocityCount,只要输出为个变量就可以了。
5、输出斑马线型表格,即隔行变色。使用如下代码就可以简单实现了
#foreach($item in $items)
<tr class="#if($velocityCount % 2 == 0) css1 #else css2 #end">
<td>列一</td>
<td>列二</td>
</tr>
#end
6、控制器自动绑定参数问题<tr class="#if($velocityCount % 2 == 0) css1 #else css2 #end">
<td>列一</td>
<td>列二</td>
</tr>
#end
MR的SmartController可以自动把客户端提交的参数绑定到控制器的方法参数上,唯一的要求是名称相同。但这也带来了一些问题。首先客户端提交的数据会来源于以下几个方面:Cookies、Form、QueryString、Header等。如果这几个来源的变量定名重名,会绑定哪个来源的参数呢?我发现如果Cookies和Form中的变量重名时,会自动把两个参数组合成一个数组来进行绑定,因此有可能会出现绑定错误,其它情况没有测试,所以建议仔细考虑Cookies中的变量名称,不要和Form中的变量重名,否则出现问题很难测试发现。
随时发现的问题会及时补充上
希望与各位前辈们交流学习