ProMesh.Net基本使用说明!
生活随笔
收集整理的這篇文章主要介紹了
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項目里,已做好了相關的配置了,如下代碼:
? <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
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基本使用说明!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Microsoft .NET Compa
- 下一篇: 运算符重载,以及迭代器[foreach]