我的monorail使用手记1(配置篇)
看了博客园里面很多关于mvc框架的文章,感觉这样的开发和编码模式和传统的asp.net是有很大的区别的,除了其优秀的mvc模式,还有其页面的生命周期!我们知道asp.net的生命周期是很复杂的,这对性能也会造成一定的影响,而且它通过viewstate来保存状态,也是让人有些不爽的地方!呵呵,好了,胡说八道完了,该说说主角了!微软公司已经放出话来会放出mvc框架,那么作为asp.net的忠实粉丝,也该好好学习一下咯!现在是不可能接触到微软的mvc框架,所以,
只有monorail还有一个ProMesh,不过后者好像还不是很成熟,加上文档少,所以就学习学习一下monorail吧!
首先下载安装包,或者二进制文件也行!地址:http://sourceforge.net/project/showfiles.php?group_id=124416
接下来我们可以开始体验之旅咯
注意:你的IDE必须支持webapplication,也就是web应用程序,而不是网站,你可以装插件也可以打sp1,两者皆可!
然后我们新建一个webApplication,首先是web.config文件
这里问题比较多,呵呵!
可以看出这是一个handler!注意name属性应为全部小写,刚开始我分大小写,会出现无法识别monorail配置节,也就死下面这个东东!
monorail配置节
viewEngine是视图引擎的配置:viewPathRoot属性为视图文件vm的文件夹,这里是views,customEngine指定引擎的类型
接下来是http处理程序和模块的配置了
<add verb="*" path ="*.vm" type="System.Web.HttpForbiddenHandler"/>
这句的作用是可以防止vm文件被浏览
接下来写个小例子吧!首先建立controllers文件夹,这个是默认的
接着建立HomeController.cs
index只是简单的在属性包(范型字典)里面加上一个名字,而这个字符串对象最终会通过引擎解释并显示出来
list是用一个datarow集合,数据访问用的是Qing,偷懒用的,呵呵!
这里推荐开发的时候用自己的业务实体类型,这也是大家所推荐的!
这里只是为了测试一下而已!数据库用的是northwind!
接下来是vm文件了,在views文件夹下建立home文件夹,然后为每个action建立vm文件
希望对新手有点帮助!呵呵!
![](/CuteSoft_Client/CuteEditor/images/emteeth.gif)
首先下载安装包,或者二进制文件也行!地址:http://sourceforge.net/project/showfiles.php?group_id=124416
接下来我们可以开始体验之旅咯
注意:你的IDE必须支持webapplication,也就是web应用程序,而不是网站,你可以装插件也可以打sp1,两者皆可!
然后我们新建一个webApplication,首先是web.config文件
这里问题比较多,呵呵!
1 <configSections>
2 <section name="monorail" type="Castle.MonoRail.Framework.Configuration.MonoRailSectionHandler,Castle.MonoRail.Framework"/>
3 </configSections>
这里是添加一个配置节,类型为Castle.MonoRail.Framework.Configuration.MonoRailSectionHandler2 <section name="monorail" type="Castle.MonoRail.Framework.Configuration.MonoRailSectionHandler,Castle.MonoRail.Framework"/>
3 </configSections>
可以看出这是一个handler!注意name属性应为全部小写,刚开始我分大小写,会出现无法识别monorail配置节,也就死下面这个东东!
monorail配置节
1 <monorail>
2 <controllers>
3 <assembly>Mvcmonorail</assembly>
4 </controllers>
5 <viewEngine viewPathRoot="Views" customEngine="Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine,Castle.MonoRail.Framework.Views.NVelocity">
6 </viewEngine>
7 </monorail>
controllers配置节得assembly是用来指定contorller所在的程序集的名称2 <controllers>
3 <assembly>Mvcmonorail</assembly>
4 </controllers>
5 <viewEngine viewPathRoot="Views" customEngine="Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine,Castle.MonoRail.Framework.Views.NVelocity">
6 </viewEngine>
7 </monorail>
viewEngine是视图引擎的配置:viewPathRoot属性为视图文件vm的文件夹,这里是views,customEngine指定引擎的类型
接下来是http处理程序和模块的配置了
1 <httpHandlers>
2 <add verb="*" path="*.ashx" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory,Castle.MonoRail.Framework"/>
3 <add verb="*" path ="*.vm" type="System.Web.HttpForbiddenHandler"/>
4 </httpHandlers>
5 <httpModules>
6 <add name="monorail" type="Castle.MonoRail.Framework.EngineContextModule, Castle.MonoRail.Framework" />
7 </httpModules>
至于作用大家都知道了吧,呵呵!2 <add verb="*" path="*.ashx" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory,Castle.MonoRail.Framework"/>
3 <add verb="*" path ="*.vm" type="System.Web.HttpForbiddenHandler"/>
4 </httpHandlers>
5 <httpModules>
6 <add name="monorail" type="Castle.MonoRail.Framework.EngineContextModule, Castle.MonoRail.Framework" />
7 </httpModules>
<add verb="*" path ="*.vm" type="System.Web.HttpForbiddenHandler"/>
这句的作用是可以防止vm文件被浏览
接下来写个小例子吧!首先建立controllers文件夹,这个是默认的
接着建立HomeController.cs
1 using System;
2 using System.Data;
3 using Castle.MonoRail.Framework;
4 using Qing;
5 using System.Collections.Generic;
6 using Northwind.Model;
7 namespace Mvcmonorail.Controllers
8 {
9 public class HomeController:Controller
10 {
11
12 public void Index()
13 {
14 PropertyBag.Add("name","A文");
15
16 }
17 public void List()
18 {
19 List<DataRow> list = new List<DataRow>();
20 Products p = new Products();
21 DataTable dt = p.SelectAsDataSet().Tables[0];
22 foreach(DataRow dr in dt.Rows)
23 {
24 list.Add(dr);
25 }
26 PropertyBag.Add("list", list);
27
28
29 }
30
31
32 }
33 }
34
这里写了两个Action,一个是index,一个是list2 using System.Data;
3 using Castle.MonoRail.Framework;
4 using Qing;
5 using System.Collections.Generic;
6 using Northwind.Model;
7 namespace Mvcmonorail.Controllers
8 {
9 public class HomeController:Controller
10 {
11
12 public void Index()
13 {
14 PropertyBag.Add("name","A文");
15
16 }
17 public void List()
18 {
19 List<DataRow> list = new List<DataRow>();
20 Products p = new Products();
21 DataTable dt = p.SelectAsDataSet().Tables[0];
22 foreach(DataRow dr in dt.Rows)
23 {
24 list.Add(dr);
25 }
26 PropertyBag.Add("list", list);
27
28
29 }
30
31
32 }
33 }
34
index只是简单的在属性包(范型字典)里面加上一个名字,而这个字符串对象最终会通过引擎解释并显示出来
list是用一个datarow集合,数据访问用的是Qing,偷懒用的,呵呵!
这里推荐开发的时候用自己的业务实体类型,这也是大家所推荐的!
这里只是为了测试一下而已!数据库用的是northwind!
接下来是vm文件了,在views文件夹下建立home文件夹,然后为每个action建立vm文件
<table>
<!--#foreach($p in $list)-->
<tr>
<td>
$p.SupplierID<br />
</td>
<td>
$p.ProductID<br />
</td>
<td>
$p.ProductName<br />
</td>
</tr>
<!--#end-->
</table>
这样访问的时候就可以看到数据了!呵呵,是不是很简单呢!<!--#foreach($p in $list)-->
<tr>
<td>
$p.SupplierID<br />
</td>
<td>
$p.ProductID<br />
</td>
<td>
$p.ProductName<br />
</td>
</tr>
<!--#end-->
</table>
希望对新手有点帮助!呵呵!