看了博客园里面很多关于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文件
这里问题比较多,呵呵!
1
<
configSections
>
2
<
section name
=
"
monorail
"
type
=
"
Castle.MonoRail.Framework.Configuration.MonoRailSectionHandler,Castle.MonoRail.Framework
"
/>
3
</
configSections
>
这里是添加一个配置节,类型为
Castle.MonoRail.Framework.Configuration.MonoRailSectionHandler
可以看出这是一个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所在的程序集的名称
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
>
至于作用大家都知道了吧,呵呵!
<
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,一个是list
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
>
这样访问的时候就可以看到数据了!呵呵,是不是很简单呢!
希望对新手有点帮助!呵呵!