阅读文章(首页/程序开发/.NET教程/)

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

[日期:2007-11-26] 来源:  作者: [字体: ]

    
   前面有朋友介绍了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代码
   1using System;
   2using Activa.ProMesh;
   3
   4
   5namespace 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
   1using System;
   2using System.ComponentModel;
   3using Activa.ProMesh;
   4using Activa.CoolStorage;
   5using Blog.Domain;
   6
   7namespace 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>
   <a href="http://www.aspcool.com/lanmu/~/u/showinfo.ashx?id=$[post.PostId]">$[post.Title]</a> [$[post.Cate.CateName]]
  </h2>
  <p class='date'>发布于$[post.PostDate] <a href="http://www.aspcool.com/lanmu/~/u/blog.ashx?uid=$[post.User.UserId]">$[post.User.UserName]</a> <a class="rss" href="http://www.aspcool.com/lanmu/dot.asp#">RSS</a></p>
  <div>
  <p>
  $[post.Summary]
  </p>
  
  </div>
  <p class="small"><a href="http://www.aspcool.com/lanmu/~/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=;"));
   }基本就可以运行了
    


阅读:
录入:blue1000

评论 】 【 推荐 】 【 打印
上一篇:如何使用 Visual C# .NET 创建 ASP.NET HTTP 模块
下一篇:asp.net实现ListBox、DropDownList无刷新三级联动(xmlhttp)
相关文章      
本文评论
发表评论


点评: 字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款