ProMesh.Net基本使用说明!

在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项目里,已做好了相关的配置了,如下代码:

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


然后在<system.web>里的

None.gif <!-- URL映射,将所有html后缀都进行处理 -->
None.gif   
< httpHandlers >
None.gif     
< add verb ="*" path ="*.html" type ="Winson.Utility.UrlRewriter" />
None.gif     
<!-- ProMesh相关设置开始 -->
None.gif     
< add verb ="*" path ="*.ashx" type ="Winson.ProMesh.PageHandler,Winson.WControls" />
None.gif     
<!-- ProMesh相关设置结束 -->
None.gif   
</ httpHandlers >
None.gif
None.gif 
< httpModules >
None.gif   
<!-- ProMesh相关设置开始 -->
None.gif     
< add name ="ProMeshModule" type ="Winson.ProMesh.HttpModule,Winson.WControls" />
None.gif   
<!-- ProMesh相关设置结束 -->
None.gif   
</ 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? lol.gif

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

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

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

None.gif < html >
None.gif
< body > 实体读取DEMO:
None.gif
< table >
None.gif
< tr >
None.gif
None.gif
< th > ID </ th >< th > FirstName </ th >< th > LastName </ th >< th > Address </ th >< th > HomePhone </ th >
None.gif
None.gif
</ tr >
None.gif
<!-- $[foreach employee in Employees] -->
None.gif
< tr >< td > $[employee.EmployeesID] </ td >< td > $[employee.FirstName] </ td >
None.gif
< td > $[employee.LastName] </ td >< td > $[employee.Address] </ td >< td > $[employee.HomePhone] </ td >
None.gif
</ tr >
None.gif
<!-- $[endfor] -->
None.gif
</ table >
None.gif
< p > There are $[employees.Count] employees </ p >
None.gif
< p > $[time] </ p >
None.gif
</ body >
None.gif
</ html >


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

None.gif <!-- $[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里的代码:

None.gif <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"; >
None.gif
< html xmlns ="http://www.w3.org/1999/xhtml"; >
None.gif
< head >
None.gif   
< title > Untitled Page </ title >
None.gif
</ head >
None.gif
< body >
None.gif
< form method ="post" action ="$[_SELF_]" >
None.gif
<!-- $[if ValidationErrors] -->
None.gif
< ul >
None.gif
<!-- $[foreach error in ValidationErrors] -->
None.gif
< li style ="color:red" > $[error.Message] </ li >
None.gif
<!-- $[endfor] -->
None.gif
</ ul >
None.gif
<!-- $[endif] -->
None.gif
< div >< label > Name: </ label > $[[Name]] </ div >
None.gif
< div >< label > Department: </ label > $[[Department::ErrorBox]] </ div >
None.gif
< div >< label > Salary: </ label > $[[Salary::ErrorBox]] </ div >
None.gif
< div >< input type ="submit" name ="btnSave" value ="Save" /></ div >
None.gif
</ form >
None.gif
</ body >
None.gif
</ html >
None.gif


以上代码执行后的效果:

attachment.aspx?attachmentid=4640

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

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

以下是重要的几句代码

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

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

ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
InBlock.gif            
/// 绑定数据源到下拉控件
ExpandedBlockEnd.gif            
/// </summary>

None.gif              protected   override   void  OnBind()
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                Fields[
"Department"].DataSource = new DataService().GetAllDepartments();
ExpandedBlockEnd.gif            }

ExpandedBlockStart.gifContractedBlock.gif            
/**/ /// <summary>
InBlock.gif            
/// 在填充表单时为各控件赋值
ExpandedBlockEnd.gif            
/// </summary>

None.gif              protected   override   void  OnFill()
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                Name 
= _employee.Name;
InBlock.gif                Department 
= _employee.DepartmentID;
InBlock.gif                Salary 
= _employee.Salary;
ExpandedBlockEnd.gif            }

ExpandedBlockStart.gifContractedBlock.gif            
/**/ /// <summary>
InBlock.gif            
/// 在提示表单时接收各控件的值
ExpandedBlockEnd.gif            
/// </summary>

None.gif              protected   override   void  OnPost()
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                _employee.Name 
= Name;
InBlock.gif                _employee.DepartmentID 
= Department;
InBlock.gif                _employee.Salary 
= Salary;
ExpandedBlockEnd.gif            }

ExpandedBlockStart.gifContractedBlock.gif            
/**/ /// <summary>
InBlock.gif            
/// 表单验证
InBlock.gif            
/// </summary>
InBlock.gif            
/// <param name="fieldName">字段名,即控件名</param>
InBlock.gif            
/// <param name="fieldValue"></param>
ExpandedBlockEnd.gif            
/// <returns></returns>

None.gif              protected   override   bool  OnValidateField( string  fieldName,  object  fieldValue)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
if (fieldName == "Salary" || fieldName == "Department")
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
if (Department == 2 && Salary != null && Salary < 30000 )
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        ValidationErrors.Add(
"Nah! Impossible for an IT person to make less than 30,000 !");
InBlock.gif                        
return false;
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

InBlock.gif                
return true;
ExpandedBlockEnd.gif            }


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


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

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

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


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


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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值