在Winson.Framework2.0里已集成了ProMesh.Net框架,由于ProMesh.Net里的内容比较多,我也不一一详细说明了,大家感兴趣的就自己慢慢研究,或者到这里查看官方发布的其他DEMO吧

http://www.codeplex.com/ProMesh/Wiki/View.aspx?title=Walkthrough&referringTitle=Home

如果还不知道ProMesh.Net为何物,请先看看这里:

http://bbs.szblogs.com/showtopic-1548.html

在此我只大概说一下ProMesh.Net的一些基本用法,即针对我的DEMO来进行一些说明:

一、配置

ProMesh.Net利用了反射,对模板进行解释,可将页面文件与后台CS文件完全分离,因此要使用ProMesh.Net,必须在web.config里先做一些配置,在我的DEMO项目里,已做好了相关的配置了,如下代码:

  <appSettings>

    <!--ProMesh相关设置开始-->
   
    <!--设置模板文件的对应后台文件的程序集-->
    <add key="ProMesh.ApplicationClass" value="Winson.BLL.Application,Winson.BLL"/>
    <!--设置模板路径-->
    <add key="TemplatePath" value="ProMeshDemo/templates"/>
    <!--设置默认的主页面名称-->
    <add key="DefaultLayout" value="master1"/>
    <!--设置默认的语言-->
    <add key="DefaultLanguage" value="en"/>
    <!--设置网站的虚拟目录,如根目录则使用 / -->
    <add key="VirtualDir" value="/winson.web/"/>

    <!--ProMesh相关设置结束-->
  </appSettings>

然后在<system.web>里的

<!--URL映射,将所有html后缀都进行处理-->
    <httpHandlers>
      <add verb="*" path="*.html" type="Winson.Utility.UrlRewriter"/>
      <!--ProMesh相关设置开始-->
      <add verb="*" path="*.ashx" type="Winson.ProMesh.PageHandler,Winson.WControls"/>
      <!--ProMesh相关设置结束-->
    </httpHandlers>

  <httpModules>
    <!--ProMesh相关设置开始-->
      <add name="ProMeshModule" type="Winson.ProMesh.HttpModule,Winson.WControls"/>
    <!--ProMesh相关设置结束-->
    </httpModules>

因为我想让此框架思路更清淅,因此自己另外建立了一个BLL的项目,专门用来放置ProMesh.Net的后台代码,其中配置里的

ProMesh.ApplicationClass即映射后台文件的程序集,在ProMeshDemo目录里的test.aspx文件就是为了测试出这个配置的具体程序集写法而用的,呵呵,与ProMesh.Net无关,大家不需理会

二、使用

由于我现在是将文件映射到*.ashx后缀,如果大家想改为其他的,如HTML,就修改上面的配置信息即可,不过如果是HTML,记得在IIS做相关的映射。

大家可以先看看DEMO里的效果,直接输入你项目的地址,后缀是ashx的即可,当然这个文件名首先要在BLL项目里有对应的CS后台文件的,如以下地址

http://localhost:1969/Winson.Web/index.ashx

这样就会直接调用Templates目录里的index.htm模板文件了,怎样,是不是感觉比较COOL?

整个DEMO并没有使用数据库,里面的会员资料均是以数组集合形式即时产生的,大家打开DataService.cs文件就可以知道如何产生这些数据的了

1)逻辑语句及变量标签的使用

在模板文件里大家会看到很多标签,这些标签有部分是系统标签,有部分是在CS文件里去定义的,这些标签运用可以非常灵活,以下将以EntityDemo.htm模板文件做以说明:

<html>
<body>实体读取DEMO:
<table>
<tr>

<th>ID</th><th>FirstName</th><th>LastName</th><th>Address</th><th>HomePhone</th>

</tr>
<!--$[foreach employee in Employees]-->
<tr><td>$[employee.EmployeesID]</td><td>$[employee.FirstName]</td>
<td>$[employee.LastName]</td><td>$[employee.Address]</td><td>$[employee.HomePhone]</td>
</tr>
<!--$[endfor]-->
</table>
<p>There are $[employees.Count] employees</p>
<p>$[time]</p>
</body>
</html>

大家可以看到,这些标签同时支持简单的逻辑判断和循环语句,如

<!--$[foreach employee in Employees]-->

foreach的用法与一般的C#语句用法是一样的,这里需要说明的是Employees,这个对象是由BLL项目里原EntityDemo.cs后台文件获得,代码如下:

ViewData["Employees"] = EmpOP.GetList();//获取Employees对象,这里将返回IList

这里的GetList()方法即调用底层获取数据的方法,没什么好说的了,大家自己看代码即可

同时大家可以看到,在ProMesh.Net里要将底层数据传上来,是使用了一个叫ViewData的集合,跟踪代码可以发现,这个ViewData最终是由ProMesh.Net里的Table.cs继承过来的,可以看出,最后返回上层的是一个键值对的集合

获取了实体对象后,就可以像调用实体一样去写相应的标签了,如上面需显示一个EmployeesID,直接写

$[employee.EmployeesID]

即可。

这里需要注意一点的是,如果要显示对象或者变量,就要使用  $[标签内容] 的标签,如果要使用逻辑语句,就要使用 <!--$[判断逻辑语句]--> 的标签

2)web控件标签的使用

ProMesh.Net同时还支持一些web控件的标签使用,请看以下editemployee.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>
    <title>Untitled Page</title>
</head>
<body>
<form method="post" action="$[_SELF_]">
<!--$[if ValidationErrors]-->
<ul>
<!--$[foreach error in ValidationErrors]-->
<li style="color:red">$[error.Message]</li>
<!--$[endfor]-->
</ul>
<!--$[endif]-->
<div><label>Name:</label> $[[Name]]</div>
<div><label>Department:</label> $[[Department::ErrorBox]]</div>
<div><label>Salary:</label> $[[Salary::ErrorBox]]</div>
<div><input type="submit" name="btnSave" value="Save" /></div>
</form>
</body>
</html>

以上代码执行后的效果:

很明显,以上代码产生了2个input和一个下拉框控件,要使用控件标签,需使用 $[[标签内容]]

那么这些标签又是如何产生的呢?请大家看相应的editemployee.cs文件,此文件里的Form类继承了WebForm,而WebForm也是ProMesh.Net的底层产生的,具体如何实现,我在此也不多说了,大家有兴趣就自己看看底层的代码吧

以下是重要的几句代码

[FormTextBox(Width = 25, MinLength = 4, ValidationErrorMsg = "Name is too short")]
public string Name;

[FormDropDown(KeyMember = "DepartmentID" , ValueMember = "Name")]
public int Department;

[FormTextBox(Width = 10, FormatString = "0.00")]
public decimal? Salary;

呵,看到了吧,对应三个控件的标签就是通过以上代码产生的了,同时还可以指定控件的默认值和校验信息等,真是做得比较COOL啦

至于如何为下拉框控件绑定数据源呢?请看以下代码:

/**//// <summary>
            /// 绑定数据源到下拉控件
            /// </summary>
            protected override void OnBind()
            {
                Fields["Department"].DataSource = new DataService().GetAllDepartments();
            }
            /**//// <summary>
            /// 在填充表单时为各控件赋值
            /// </summary>
            protected override void OnFill()
            {
                Name = _employee.Name;
                Department = _employee.DepartmentID;
                Salary = _employee.Salary;
            }
            /**//// <summary>
            /// 在提示表单时接收各控件的值
            /// </summary>
            protected override void OnPost()
            {
                _employee.Name = Name;
                _employee.DepartmentID = Department;
                _employee.Salary = Salary;
            }
            /**//// <summary>
            /// 表单验证
            /// </summary>
            /// <param name="fieldName">字段名,即控件名</param>
            /// <param name="fieldValue">值</param>
            /// <returns></returns>
            protected override bool OnValidateField(string fieldName, object fieldValue)
            {
                if (fieldName == "Salary" || fieldName == "Department")
                {
                    if (Department == 2 && Salary != null && Salary < 30000 )
                    {
                        ValidationErrors.Add("Nah! Impossible for an IT person to make less than 30,000 !");
                        return false;
                    }
                }
                return true;
            }

通过以上代码,即可将表单完整地实现出来了!

OK,说了这么多,现在也应该说说这个框架的一些缺点啦,呵呵。

之前本来我是想用这个框架来做个项目的,但由于其实现形式必须是模板对应一个CS文件,因此就必须为每个模板写相应的后台文件,当时就感觉这样每个去写后台文件挺麻烦的,而更郁闷的是,使用了这个框架后,所有服务器控件都不能再使用了,包括我自己的SqlPager控件等都不能用了 ,感觉这样写起代码来会辛苦好多啊!

不过不管怎样,如果对性能要求较高的项目,使用这个东西还是挺不错的,而且其标签功能也确实挺强大,有兴趣的朋友慢慢研究下吧,呵!

好了,对于ProMesh.Net框架,我就先说这么多啦,由于此框架功能也比较强大,太多的细节了,我只是大概说了一下用法,具体的东西还是等大家自己慢慢去体会吧,呵呵,其实我自己也没太深入地去研究,还有很多地方也不太清楚如何使用,如果有朋友研究出来了,非常希望能在此与大家分享一下哦

终于写完了,好久没写过这么长的东西了,写得不好,不要见怪啊!

如有问题,欢迎到我论坛提出:
http://bbs.szblogs.com/showforum-22.html

转载于:https://www.cnblogs.com/winsonet/archive/2007/12/04/981702.html

ProMesh.Net基本使用说明!相关推荐

  1. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...

    高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...

  2. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...

    cmd replace 文件替换使用说明 帮助信息: 复制代码 代码如下: 替换文件. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [ ...

  3. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  4. Delphi开发的IOCP测试Demo以及使用说明。

    Delphi开发的IOCP,此为压力测试Demo和使用说明.

  5. oracle database link mysql_oracle database link使用说明

    oracle database link使用说明 作用: 将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象. 简易语法: CREATE [PUBLIC] ...

  6. 序列拼接工具Bowtie使用说明

    序列拼接工具Bowtie使用说明 2011-06-08 ~ ADMIN Bowtie是一个超级快速的,较为节省内存的短序列拼接至模板基因组的工具.它在拼接35碱基长度的序列时,可以达到每小时2.5亿次 ...

  7. benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明

    关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...

  8. 计算机网页基础课专业,关于《计算机应用基础》课程网页下的学习资源使用说明....

    关于<计算机应用基础>课程网页下的学习资源使用说明. 关于<计算机应用基础>课程网页下的学习资源使用说明 各位同学:大家好! 07春学期已接近一半的时间了,新生对课程还需要更多 ...

  9. gh ost mysql_MySQL在线DDL gh-ost 使用说明

    3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...

最新文章

  1. Java 8学习资料汇总
  2. Ubuntu 将应用程序 固定到快快速启动栏(以Sublime为例)
  3. javafx设计自适应大小的窗口_“翅膀”开始流行 宝马坐不住了 开发摩托车自适应空气动力设计...
  4. HALCON示例程序class_2dim_unsup.hdev基于二维直方图的聚类分类
  5. solrcloud线上创建collection,修改默认配置
  6. Python的subprocess模块(二)
  7. leetcode刷题:合并两个有序链表
  8. VS2008引用webservice的奇怪BUG解决方案
  9. javascript中的forEach
  10. 错过了多次捞钱的机会
  11. U盘刻录操作系统的详细步骤
  12. Theano学习二:内存、变量、函数、自动微分、循环、scan以及分析调试等基础知识
  13. html所有的标签,html所有标签超详细概述
  14. 【C#】利用读卡器对IC卡进行读写、加密等操作,源码下载
  15. Android WebView播放视频flash(判断是否安装flash插件)
  16. 梅特勒托利多电子秤显示EEP服务器错误,托利多电子秤TCII故障维修方法(一)...
  17. iOS 常用快捷键 摆脱菜鸟!!
  18. 解决WIN10“系统和压缩内存”“ntoskrnl.exe”系统空闲时占用大量CPU
  19. 《C++ Concurrency in Action》笔记28 无锁并行数据结构
  20. Ubuntu 20.04安装CUDA失败导致系统黑屏消息nvidia 0000:01:00.0: can‘t change power state from D3cold to D0 的解决方法

热门文章

  1. 32位数型计算机什么意思,展示32位是什么意思
  2. java流实例_java流汇总以及使用实例
  3. pythonset操作教程_Python集合(set)方式和使用方法
  4. 029_jdbc-mysql二进制数据
  5. 001-SDK框架之Unity游戏调用SDK
  6. mysql pricing amp; licensing_Global Pricing and Licensing
  7. Android开发中遇到的bug
  8. python脚本备份网络交换的命令
  9. 数据结构——图:极大小连通子图、图的存储结构、图的遍历
  10. coordinatorlayout 设置不可滑动_滑动关闭App损害iPhone电池寿命,我们需要“改掉强迫症”吗?...