开源的.net MVC框架ProMesh.NET学习

 前面有朋友介绍了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文件,下面是我的配置
 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

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}

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
 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

上面是我的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 >
    
< href ="~/u/showinfo.ashx?id=$[post.PostId]" > $[post.Title] </ a > &nbsp; [$[post.Cate.CateName]]
</ h2 >
< class ='date' > 发布于$[post.PostDate]  < href ="~/u/blog.ashx?uid=$[post.User.UserId]" > $[post.User.UserName] </ a >   < class ="rss"  href ="#" > RSS </ a ></ p >
< div >
< p >
$[post.Summary]
</ p >

</ div >
< class ="small" >< href ="~/u/showinfo.ashx?id=$[post.PostId]" > 阅读全文  &raquo; </ 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=;"));
            }
基本就可以运行了

你可能感兴趣的:(.net)