前面有朋友介绍了Activa.ProMesh这个WEB开发框架.看起来觉得用起来蛮不错的.就学习了下,用了点时间做了个blog示例,示例演示:
http://cnblogs.icastle.com.cn/index.ashx
blog例子下载地址:
http://cnblogs.icastle.com.cn/newblog.rar
之前提供的数据库表结构不完整,现在加上了,并且有数据库备份文件,另外项目使用VS.NET2008开发的,所以很抱歉,有要打开的,只有自己降到VS2005了
另外推荐下我同事弄的代码片段网,有用的代码片段都可以来这里发布哦
http://www.codesnippets.cn
觉得ProMesh学习起来还是很简单的,例子也很容易看懂. 稍微研究下相关的方法都能了解个大概.
下面把基本配置说下,很简单
1.引用Activa.ProMesh.dll
2.配置web.config文件,下面是我的配置
httpHandler和httpModule就按照上面的配置.path="*.ashx"改成你想要的扩展名.
设置ProMesh.ApplicationClass,注意value="Blog.Web.Application, Blog.Web",后面一个Blog.Web是程序集名称,不是namespace
<add key="ProMesh.ApplicationClass" value="Blog.Web.Application, Blog.Web"/>
配置Application.cs代码
3.开始写Controller
所有的Controller都要继承PageController类,每个Controller都对应一个同名template,template默认放在templates目录下,例如我有一个indexController,在templates下应该有一个index.htm文件.框架默认要建一个master.htm,会应用到所有的Controller,
master.htm代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
$[_VIEW_]
</body>
</html>
$[_VIEW_],即是要替换的内容
login.cs
<div id="columnwrap">
<div id="content-main">
<h1>$[user.UserName]的博客</h1>
<h2 class="deck"><!--博客介绍--></h2>


<!--$[foreach post in posts]-->
<h2>
<a href="~/u/showinfo.ashx?id=$[post.PostId]">$[post.Title]</a> [$[post.Cate.CateName]]
</h2>
<p class='date'>发布于$[post.PostDate] <a href="~/u/blog.ashx?uid=$[post.User.UserId]">$[post.User.UserName]</a> <a class="rss" href="#">RSS</a></p>
<div>
<p>
$[post.Summary]
</p>

</div>
<p class="small"><a href="~/u/showinfo.ashx?id=$[post.PostId]">阅读全文 »</a></p>
<!--$[endfor]-->

<div id="content-secondary" align="center">
</p>
页数
</p>
</div>
</div>
<!-- END #content-main -->
<div id="content-related" class="sidebar">
<!--$[render "../../templates/u/menu.htm"]-->
</div>
这样一个基本的例子就可以运行了。里面还有很多细节的使用。我在例子中一种效果都使用了多种方法来测试,可以看看例子的使用
数据库建表文件在DataBase目录里
数据库连接在Global.cs文件里个性
if (!CSConfig.HasDB())
{
CSConfig.SetDB(new CSDataProviderSqlServer("Server=.;Database=NewBlog;UID=sa;PWD=;"));
}
基本就可以运行了
http://cnblogs.icastle.com.cn/index.ashx
blog例子下载地址:
http://cnblogs.icastle.com.cn/newblog.rar
之前提供的数据库表结构不完整,现在加上了,并且有数据库备份文件,另外项目使用VS.NET2008开发的,所以很抱歉,有要打开的,只有自己降到VS2005了
另外推荐下我同事弄的代码片段网,有用的代码片段都可以来这里发布哦
http://www.codesnippets.cn
觉得ProMesh学习起来还是很简单的,例子也很容易看懂. 稍微研究下相关的方法都能了解个大概.
下面把基本配置说下,很简单
1.引用Activa.ProMesh.dll
2.配置web.config文件,下面是我的配置
1
<?xml version="1.0" encoding="utf-8"?>
2
3
<configuration>
4
5
<appSettings>
6
<add key="ProMesh.ApplicationClass" value="Blog.Web.Application, Blog.Web"/>
7
</appSettings>
8
9
<system.web>
10
<!--
11
设置 compilation debug="true" 可将调试符号插入
12
已编译的页面中。但由于这会
13
影响性能,因此只在开发过程中将此值
14
设置为 true。
15
-->
16
<compilation debug="false">
17
18
</compilation>
19
<!--
20
通过 <authentication> 节可以配置 ASP.NET 用来
21
识别进入用户的
22
安全身份验证模式。
23
-->
24
<authentication mode="Windows" />
25
<!--
26
如果在执行请求的过程中出现未处理的错误,
27
则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
28
开发人员通过该节可以配置
29
要显示的 html 错误页
30
以代替错误堆栈跟踪。
31
32
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
33
<error statusCode="403" redirect="NoAccess.htm" />
34
<error statusCode="404" redirect="FileNotFound.htm" />
35
</customErrors>
36
-->
37
<httpHandlers>
38
<add verb="*" path="*.ashx" type="Activa.ProMesh.PageHandler, Activa.ProMesh"/>
39
</httpHandlers>
40
<httpModules>
41
<add name="ProMeshModule" type="Activa.ProMesh.HttpModule, Activa.ProMesh"/>
42
</httpModules>
43
</system.web>
44
45
</configuration>
46
<?xml version="1.0" encoding="utf-8"?>2

3
<configuration>4
5
<appSettings>6
<add key="ProMesh.ApplicationClass" value="Blog.Web.Application, Blog.Web"/>7
</appSettings>8
9
<system.web>10
<!-- 11
设置 compilation debug="true" 可将调试符号插入12
已编译的页面中。但由于这会 13
影响性能,因此只在开发过程中将此值 14
设置为 true。15
-->16
<compilation debug="false">17

18
</compilation>19
<!--20
通过 <authentication> 节可以配置 ASP.NET 用来 21
识别进入用户的22
安全身份验证模式。 23
-->24
<authentication mode="Windows" />25
<!--26
如果在执行请求的过程中出现未处理的错误,27
则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,28
开发人员通过该节可以配置29
要显示的 html 错误页30
以代替错误堆栈跟踪。31

32
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">33
<error statusCode="403" redirect="NoAccess.htm" />34
<error statusCode="404" redirect="FileNotFound.htm" />35
</customErrors>36
-->37
<httpHandlers>38
<add verb="*" path="*.ashx" type="Activa.ProMesh.PageHandler, Activa.ProMesh"/>39
</httpHandlers>40
<httpModules>41
<add name="ProMeshModule" type="Activa.ProMesh.HttpModule, Activa.ProMesh"/>42
</httpModules>43
</system.web>44

45
</configuration>46

httpHandler和httpModule就按照上面的配置.path="*.ashx"改成你想要的扩展名.
设置ProMesh.ApplicationClass,注意value="Blog.Web.Application, Blog.Web",后面一个Blog.Web是程序集名称,不是namespace
<add key="ProMesh.ApplicationClass" value="Blog.Web.Application, Blog.Web"/>
配置Application.cs代码
1
using System;
2
using Activa.ProMesh;
3
4
5
namespace Blog.Web
6
{
7
public static class Application
8
{
9
10
public static void Init()
11
{
12
13
}
14
}
15
}
using System;2
using Activa.ProMesh;3

4

5
namespace Blog.Web6
{7
public static class Application8
{9

10
public static void Init()11
{12

13
}14
}15
}3.开始写Controller
所有的Controller都要继承PageController类,每个Controller都对应一个同名template,template默认放在templates目录下,例如我有一个indexController,在templates下应该有一个index.htm文件.框架默认要建一个master.htm,会应用到所有的Controller,
master.htm代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
$[_VIEW_]
</body>
</html>
login.cs
1
using System;
2
using System.ComponentModel;
3
using Activa.ProMesh;
4
using Activa.CoolStorage;
5
using Blog.Domain;
6
7
namespace Blog.Web.Controllers
8
{
9
[Layout("u/blogmaster")]
10
[Url("u/blog")]
11
public class blog : BaseController
12
{
13
public void Run(int uid)
14
{
15
BlogUser user = BlogUser.Read(uid);//当前用户
16
17
CSParameterCollection param = new CSParameterCollection();
18
param.Add("@uid",uid);
19
20
CSList<BlogCate> cates = BlogCate.List("Uid=@uid",param).OrderedBy("CateId");//分类数据
21
22
CSList<BlogPost> posts = BlogPost.List("UserId=@uid","@uid",uid).OrderedBy("PostId");//日志数据
23
posts.ApplySort(posts.SortProperty, ListSortDirection.Descending);//排序
24
25
ViewData["cates"] = cates;
26
ViewData["posts"] = posts;
27
ViewData["user"] = user;
28
}
29
}
30
}
31
using System;2
using System.ComponentModel;3
using Activa.ProMesh;4
using Activa.CoolStorage;5
using Blog.Domain;6

7
namespace Blog.Web.Controllers8
{9
[Layout("u/blogmaster")]10
[Url("u/blog")]11
public class blog : BaseController12
{13
public void Run(int uid)14
{15
BlogUser user = BlogUser.Read(uid);//当前用户16

17
CSParameterCollection param = new CSParameterCollection();18
param.Add("@uid",uid);19

20
CSList<BlogCate> cates = BlogCate.List("Uid=@uid",param).OrderedBy("CateId");//分类数据21

22
CSList<BlogPost> posts = BlogPost.List("UserId=@uid","@uid",uid).OrderedBy("PostId");//日志数据23
posts.ApplySort(posts.SortProperty, ListSortDirection.Descending);//排序24

25
ViewData["cates"] = cates;26
ViewData["posts"] = posts;27
ViewData["user"] = user;28
}29
}30
}31

上面是我的loginController,刚才说了默认所有Controller应用master.htm模版,这里通过[Layout("u/blogmaster")]重新指定新的母版页,即templates/u/blogmaster.htm文件,[Url("u/blog")]即指定访问地址,这里地址是u/blog.ashx. 上面说了,每个Controller对应同名的template,可以定义
[View("u/blog")]自己指定view模版
Run是Controller的入口,使用ViewData["posts"]向模版传递变量,下面是模版代码
posts是一个IList,所以这里
<!--$[foreach post in posts]-->
<!--$[endfor]-->
进行遍历输出数据,上面就是模版引擎的语法。还是很简单的。和monorails有点区别,也容易理解
<div id="columnwrap">
<div id="content-main">
<h1>$[user.UserName]的博客</h1>
<h2 class="deck"><!--博客介绍--></h2>

<!--$[foreach post in posts]-->
<h2>
<a href="~/u/showinfo.ashx?id=$[post.PostId]">$[post.Title]</a> [$[post.Cate.CateName]]
</h2>
<p class='date'>发布于$[post.PostDate] <a href="~/u/blog.ashx?uid=$[post.User.UserId]">$[post.User.UserName]</a> <a class="rss" href="#">RSS</a></p>
<div>
<p>
$[post.Summary]
</p>
</div>
<p class="small"><a href="~/u/showinfo.ashx?id=$[post.PostId]">阅读全文 »</a></p>
<!--$[endfor]-->
<div id="content-secondary" align="center">
</p>
页数
</p>
</div>
</div>
<!-- END #content-main -->
<div id="content-related" class="sidebar">
<!--$[render "../../templates/u/menu.htm"]-->
</div>
这样一个基本的例子就可以运行了。里面还有很多细节的使用。我在例子中一种效果都使用了多种方法来测试,可以看看例子的使用
数据库建表文件在DataBase目录里
数据库连接在Global.cs文件里个性
if (!CSConfig.HasDB())
{
CSConfig.SetDB(new CSDataProviderSqlServer("Server=.;Database=NewBlog;UID=sa;PWD=;"));
}


浙公网安备 33010602011771号