MonoRail學習筆記十一:頁面控件的填充和驗證

Mono提供很多組件可以方便的處理頁面:可以自動將后臺的值填充到頁面,可以自動進行Javascript驗證,可以自動在后臺驗證等。這些功能都是比較實用的,可以減少很多開發
FormHelper是用來對應html頁面中Form內的tag的,可以自動填充textbox等?
ValidationHelper可以幫助我們在前臺利用Javascript驗證
Castle.Components.Validator組件可以在后臺對頁面輸入值進行驗證
一、自動填充頁面
普通填充:
HomeController:
????????public?void?Fill1()
????????
{
????????????PropertyBag.Add(
"id",?"1");
????????????PropertyBag.Add(
"name",?"GSpring");
????????????PropertyBag.Add(
"sex",?"1");
????????}
Fill1.vm:
<form?>
id:$FormHelper.TextField("id")
<br?/>
name:$FormHelper.TextField("name")
<br?/>
sex
?male:$FormHelper.RadioField("sex",?"1")
?female:$FormHelper.RadioField("sex",?"0")
</form>
當我們執行http://****/home/Fill1.rails時會自動將對應的值綁定到頁面中去,頁面結果為:

我這里只是實驗了常用的textbox和radiobutton,其他的也是同樣處理的
高級填充:
public?void?Index()
{
????PropertyBag.Add(
"list",?new?string[]?
????
{
????????
"value?1",?"value?2"
????}
?);

????PropertyBag.Add(
"contacts",?new?Contact[]?
????
{?
????????
new?Contact("john",?"address?1",?"phone?number?1"),
????????
new?Contact("mary",?"address?2",?"phone?number?2")
????}
?);
}
Vm代碼:
<form?action="Save.rails"?method="post">

$FormHelper.TextField("list[0]")
$FormHelper.TextField("list[1]")

$FormHelper.TextField("contacts[0].name")
$FormHelper.TextField("contacts[0].address")
$FormHelper.TextField("contacts[0].phone")

$FormHelper.TextField("contacts[1].name")
$FormHelper.TextField("contacts[1].address")
$FormHelper.TextField("contacts[1].phone")
</form>
可以自動將對象、數組中對應的值填充到頁面上去

二、前臺驗證
1、?只能輸入數字的限制
只需要在Vm中寫:
$FormHelper.InstallScripts()
$FormHelper.NumberField("age")
$FormHelper.NumberField("amount", "%{exceptions='32',forbid='48,49'}")
第一句是注冊腳本,第二句是生成一個textbox,并且只能輸入數字
第三句是生成一個textbox,并且只能輸入數字,同時可以輸入code=32的字符,同時不能輸入code=48或49的字符
2、ValidationHelper驗證
功能很強大,我這里只是列出一些簡單的使用,使用這種方式時幾乎不需要后臺代碼,只需要在vm文件中定義就可以了:
<html>
????
<head>
????????
<title>Validation?Test</title>
????????$ValidationHelper.InstallScripts()
????????$ValidationHelper.SetSubmitOptions(true,?true,?false,?0)
????
</head>
????
<body>
????????
<form?method="post"?id="demoForm"?onsubmit="$ValidationHelper.GetValidationTriggerFunction()">
????????????????????姓名:
<input?type="text"?name="Name"?id="Name"?displayName="姓名"?validators="blank"?/><br?/>
????????????????????密碼:
<input?type="password"?name="Password"?id="Password"?validators="length|6"?/><br?/>
????????????????????郵件:
<input?type="text"?name="Email"?id="Email"?validators="email|3"?/><br?/>
????????????????????確認郵件:
<input?type="text"?name="Email_Confirm"?id="Email_Confirm"?validators="equalto|Email"?/><br?/>
????????????????
<input?type="submit"?name="Submit"?value="測試"?/>
????????
</form>
????
</body>
</html>
開始的$ValidationHelper.InstallScripts()和$ValidationHelper.SetSubmitOptions(true, true, false, 0)兩句話是注冊腳本的,不能少
然后主要就是validators屬性設置的值了,比如:blank(不能為空)、length|6(六位長度)、email(郵件類型)等
在這個例子中,當什么也不輸,直接點測試時,會彈出一個對話框報錯:Please enter 姓名
這里顯示的都是英文的報錯信息,如果需要使用中文報錯,可以使用以下方法:
(由于目前MonoRail沒有提供簡體中文的報錯,需要我們自己生成)
復制MonoRail\Castle.MonoRail.Framework\Controllers目錄下的ValidationLang.resx文件,改名為ValidationLang.zh-cn.resx,然后將此文件中對應的英文提示改為中文,比如:
????????????fvalidate.i18n?=
????????????{
????????????????//????Validation?errors
????????????????errors:
????????????????{
????????????????????blank:????????[
????????????????????????["請輸入:",?0]
????????????????????????],
將框架項目重新編譯
然后將vm中的第四條語句改成:
$ValidationHelper.InstallScripts("zh-cn")
這樣當再次照上面的步驟執行時會彈出一個對話框報錯:請輸入:姓名

三、Castle.Components.Validator后臺驗證使用
ValidatorController.cs代碼:
????public?class?User
????
{
????????
private?int?id;
????????
private?string?name,?email,?password,?confirmation;

????????
public?User()
????????
{
????????}

????????
public?User(string?name,?string?email)
????????
{
????????????
this.name?=?name;
????????????
this.email?=?email;
????????}


????????
public?int?Id
????????
{
????????????
get?{?return?id;?}
????????????
set?{?id?=?value;?}
????????}


????????[ValidateNonEmpty]
????????
public?string?Name
????????
{
????????????
get?{?return?name;?}
????????????
set?{?name?=?value;?}
????????}


????????[ValidateNonEmpty,?ValidateEmail]
????????
public?string?Email
????????
{
????????????
get?{?return?email;?}
????????????
set?{?email?=?value;?}
????????}


????????[ValidateNonEmpty]
????????
public?string?Password
????????
{
????????????
get?{?return?password;?}
????????????
set?{?password?=?value;?}
????????}


????????[ValidateSameAs(
"Password")]
????????
public?string?Confirmation
????????
{
????????????
get?{?return?confirmation;?}
????????????
set?{?confirmation?=?value;?}
????????}

????}


????
public?class?ValidatorController?:?SmartDispatcherController
????
{
????????
public?ValidatorController()
????????
{
????????}


????????
public?void?Index()
????????
{
????????}

????????
public?void?Test([DataBind("user",?Validate?=?true)]?User?user)
????????
{
????????????
if?(HasValidationError(user))
????????????
{
????????????????Flash[
"user"]?=?user;
????????????????Flash[
"summary"]?=?GetErrorSummary(user);
????????????????RedirectToReferrer();
????????????}

????????????
else
????????????
{
????????????????
//其他操作
????????????????CancelView();
????????????}

????????}

????}
最主要的就是User中每個字段上定義的屬性,比如ValidateNonEmpty(不能為空)、ValidateEmail(郵件格式)、ValidateSameAs(判斷是否相同)、ValidateLeng(長度判斷)、ValidateDate(日期判斷)等

index.vm:
<html>
<body>
$FormHelper.FormTag("%{action='Test',?immediate='true',?useLabels='true'}")

#if($summary)
<p>
????
<div>
????發生以下錯誤:
????
</div>
????#foreach($propName?in?$summary.InvalidProperties)
????$propName:?#foreach($msg?in?$summary.GetErrorsForProperty($propName))?$msg?#end?
<br/>
????#end
</p>
#end
????姓名:$FormHelper.TextField("user.name")
<br?/>
????郵件:$FormHelper.TextField("user.email")
<br?/>
????密碼:$FormHelper.PasswordField("user.password")
<br?/>
????確認密碼:$Form.PasswordField("user.confirmation")
<br?/>
<input?type="submit"?value="確認"?/>
$FormHelper.EndFormTag()
</body>
</html>
當瀏覽?http://localhost:***/validator/index.rails?在什么也不輸的情況下直接點確認,會報錯:

這樣,我們幾乎一句檢查的代碼都沒寫,就可以達到檢查的效果了
當然,默認的報錯信息是英文的,我們可以修改如下定義:
????????[ValidateNonEmpty("不能為空",?FriendlyName="姓名")]
????????
public?string?Name
????????
{
????????????
get?{?return?name;?}
????????????
set?{?name?=?value;?}
????????}
那么在姓名列沒輸入時會報錯:姓名: 不能為空

其實User類的定義就相當于一張表的Model,在Monorail中把Model定義好,就可以達到驗證的功能了




? ? 本文轉自永春博客園博客,原文鏈接:http://www.cnblogs.com/firstyi/archive/2007/10/31/944282.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286444.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286444.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaBean的詳細及引用

1.JavaBean實際是具有統一接口格式的java類 2.JavaBean的組成&#xff1a;屬性(Properties)、方法(Method)、事件(Events) 3.一個JavaBean的例子(該例子是用的Simple屬性<屬性在以后說>) //我遵循的習慣是類名大寫&#xff0c;包名小寫package com;//意思是將 FirstBean這…

驅動開發實戰之TcpClient

場景模擬假設你有一批非標設備需要對接&#xff0c;你需要根據設備方提供的協議&#xff0c;為IoTGateway開發驅動&#xff0c;進行數據交互。文章比較長也可以到官網會有更好的體驗&#xff0c;地址:http://iotgateway.net/docs/iotgateway/driver/tcpclient請先瀏覽上一篇驅動…

php讀取acc

<?PHP/*創建ADO連接*/$conn new COM("ADODB.Connection") or die ("ADO Connection faild.");$connstr "DRIVER{Microsoft Access Driver (*.mdb)}; DBQ" . realpath("DATUM/cnbt.mdb");$conn->Open($connstr);/*創建記錄集查…

【遙感數字圖像處理實驗】Erdas版詳細圖文實驗教程(8實驗全)

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 遙感數字圖像的處理&#xff0c;是對遙感數字圖像的計算機處理。與工業和醫學數字圖像不同&#xff0c;遙感數字圖像類型更為多樣&#xff0c;內容更為復雜。因此&#xff0c;遙感數字圖像的處理&#xff0c;不僅需要掌握…

WEBAPI 增加身份驗證 (OAUTH 2.0方式)

1&#xff0c;在Webapi項目下添加如下引用&#xff1a;Microsoft.AspNet.WebApi.OwinOwinMicrosoft.Owin.Host.SystemWebMicrosoft.Owin.Security.OAuthMicrosoft.Owin.Security.CookiesMicrosoft.AspNet.Identity.OwinMicrosoft.Owin.Cors2&#xff0c; 在項目下新建Startup類…

C語言試題二之計算并輸出下列多項式值s=1+1/(1+2)+1/(1+2+3)+..1/(1+2+3…+50)

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 計算并輸出…

無代碼iVX編程實現簡單 小蜜蜂 經典游戲

首先咱們打開 iVX 的在線編輯器&#xff1a;https://editor.ivx.cn/ 隨后選擇相對定位&#xff0c;咱們選擇2D游戲類型制作一個簡單小蜜蜂游戲&#xff1a; 接著咱們創建一個物理世界&#xff0c;并且將頁面布局如以下&#xff1a; 以上布局中&#xff0c;矩形為模擬飛機、…

【無人機航空攝影測量精品教程】目錄:Pix4d、EPS、CC、PhotoScan、Godwork項目化作業流程及注意事項匯總

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 該專欄為目前最為熱門的無人機航測內外業項目&#xff0c;主要內容包括&#xff1a;無人機航測外業作業流程&#xff08;像控點布設、航線規劃、仿地飛行、航拍&#xff09;和內業數據處理軟件&#xff08;Pix4d、CC、EP…

WPF 基礎控件之 Slider 樣式

其他基礎控件1.Window2.Button3.CheckBox4.ComboBox5.DataGrid 6.DatePicker7.Expander8.GroupBox9.ListBox10.ListView11.Menu12.PasswordBox13.TextBox14.RadioButton15.ToggleButtonSlider 實現下面的效果1&#xff09;Slider來實現動畫&#xff1b;Grid嵌套 Border并設置S…

SQL 通過syscolumns.xtype動態查找指定數據類型字段所包含的數據

表中太多列&#xff0c;只想查找某些比如&#xff0c;數據類型為varchar的字段的數據。 思路&#xff1a;1、先獲取列名&#xff1a; select * from syscolumns where id(select max(id) from sysobjects where xtypeu and nametest_A)2、查找指定數據類型&#xff0c;xtype就…

css案例學習之span邊框實現的特殊效果

bottom left bottom right top left top right 配合顏色來使用&#xff0c;實現一些神奇的效果 #menu a span{height:0;width:0;/*border-top:solid 6px #fff;border-left:solid 6px #f90;*//*border-top:solid 6px #fff;border-right:solid 6px #f90;*//*border-bottom:solid …

網頁版消消樂快速實現,無代碼嗎iVX 真那么簡單?

最近沒事想做個消消樂&#xff0c;然后聽說 iVX 免費了&#xff0c;所以又跑去看看 iVX 了&#xff0c;就用一個無代碼來看看消消樂怎么玩吧。 首先咱們打開 iVX 的在線編輯器&#xff1a;https://editor.ivx.cn/ 隨后咱們不需要游戲類型也可以制作一個消消樂游戲&#xff1a…

虛擬化記錄--No.1

近段時間&#xff0c;會花些時間做關于系統虛擬化的工作。所以會做一些這樣的記錄。相信很多東西不會特別成體系&#xff0c;每個人因為關注的不同而記錄和學習的重點也會有比較大的出入。這篇是NO.1(注意不是TOP 1 )真的是由于對于ORACLE很有感覺&#xff0c;所以上手去做的也…

C語言試題三之計算并輸出 s=1+(1+2^(0.5))+(1+2^(0.5)+3^(0.5))+…+(1+2^(0.5)+3^(0.5)+…+n^(0.5))

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1 、題目 請編寫函…

C# Java間進行RSA加密解密交互

這里&#xff0c;講一下RSA算法加解密在C#和Java之間交互的問題&#xff0c;這兩天糾結了很久&#xff0c;也看了很多其他人寫的文章&#xff0c;頗受裨益&#xff0c;但沒能解決我的實際問題&#xff0c;終于&#xff0c;還是被我搗鼓出來了。 首先&#xff0c;介紹一下寫這代…

【Microstation】三維建模基礎及軟件入門到精通實驗教程目錄

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 MicroStation是一款非常不錯的二維和三維設計軟件&#xff0c;由奔特力&#xff08;Bentley&#xff09;工程軟件系統有限公司開發的一款軟件。在CAD設計上該軟件是和AutoCAD是齊名的軟件&#xff0c;其專用的文件格式是…

無代碼iVX編程實現簡單魂斗羅

首先咱們打開 iVX 的在線編輯器&#xff1a;https://editor.ivx.cn/ 隨后咱們選擇2D游戲類型制作一個簡單魂斗羅游戲&#xff1a; 隨后咱們開始創建一個物理世界&#xff0c;不并且在物理世界之下創建一個一個圖片添加物體屬性&#xff0c;在物體屬性中更改對應的屬性內容&am…

【ArcGIS遇上Python】ArcGIS Python批處理入門到精通實用教程目錄

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 Python語言是目前很火熱的語言&#xff0c;極大的促進了人工智能發展。你知道在ArcGIS中也會有python的身影嗎&#xff1f;事實上&#xff0c;在ArcGIS中使用Python會起到事半功倍的效果&#xff0c;大大提高工作效率&am…

Android之提示javax.net.ssl.SSLHandshakeException: Chain validation failed

1、問題 個別手機用OkDownload下載Bilibili網址視頻的時候下載失敗,但是大部分手機下載沒問題。 在繼承的DownloadListener4WithSpeed類的重寫taskEnd函數里面。 override fun taskEnd(task: DownloadTask, cause: EndCause, realCause: Exception?, taskSpeed: SpeedCalcu…

c# XML和實體類之間相互轉換(序列化和反序列化)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using System.Xml; using System.Xml.Serialization; /// <summary>/// Xml序列化與反序列化/// </summary>public class XmlUtil {…