MonoRail&ActiveRecord开发中的注意事项

        初学.net,经常在园子里潜水,聆听前辈们的指点教化,学.net是为了开发一个项目,仔细考虑一番后,决定使用castle的MR来做为开发框架,原因很简单,WebForm中各种各样的服务器控件搞得头晕脑涨,PostBack的模型让俺不知道程序到底在执行了什么,觉得还是使用简单的MVC模型更适合利用旧的WEB常识来完成这件工作,新的东西学起来费劲,于是选择了MR。
      由于是边学边开发,经常遇到一些问题,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、控制器自动绑定参数问题
      MR的SmartController可以自动把客户端提交的参数绑定到控制器的方法参数上,唯一的要求是名称相同。但这也带来了一些问题。首先客户端提交的数据会来源于以下几个方面:Cookies、Form、QueryString、Header等。如果这几个来源的变量定名重名,会绑定哪个来源的参数呢?我发现如果Cookies和Form中的变量重名时,会自动把两个参数组合成一个数组来进行绑定,因此有可能会出现绑定错误,其它情况没有测试,所以建议仔细考虑Cookies中的变量名称,不要和Form中的变量重名,否则出现问题很难测试发现。
      随时发现的问题会及时补充上
      希望与各位前辈们交流学习
原文地址:https://www.cnblogs.com/inhesoft/p/1096086.html