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;?}
????????} 那么在姓名列沒輸入時會報錯:姓名: 不能為空
FormHelper是用來對應html頁面中Form內的tag的,可以自動填充textbox等?
ValidationHelper可以幫助我們在前臺利用Javascript驗證
Castle.Components.Validator組件可以在后臺對頁面輸入值進行驗證
一、自動填充頁面
普通填充:
HomeController:














我這里只是實驗了常用的textbox和radiobutton,其他的也是同樣處理的
高級填充:


























二、前臺驗證
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文件中定義就可以了:
















然后主要就是validators屬性設置的值了,比如:blank(不能為空)、length|6(六位長度)、email(郵件類型)等
在這個例子中,當什么也不輸,直接點測試時,會彈出一個對話框報錯:Please enter 姓名
這里顯示的都是英文的報錯信息,如果需要使用中文報錯,可以使用以下方法:
(由于目前MonoRail沒有提供簡體中文的報錯,需要我們自己生成)
復制MonoRail\Castle.MonoRail.Framework\Controllers目錄下的ValidationLang.resx文件,改名為ValidationLang.zh-cn.resx,然后將此文件中對應的英文提示改為中文,比如:








然后將vm中的第四條語句改成:
$ValidationHelper.InstallScripts("zh-cn")
這樣當再次照上面的步驟執行時會彈出一個對話框報錯:請輸入:姓名
三、Castle.Components.Validator后臺驗證使用
ValidatorController.cs代碼:









































































index.vm:























這樣,我們幾乎一句檢查的代碼都沒寫,就可以達到檢查的效果了
當然,默認的報錯信息是英文的,我們可以修改如下定義:






其實User類的定義就相當于一張表的Model,在Monorail中把Model定義好,就可以達到驗證的功能了
? ? 本文轉自永春博客園博客,原文鏈接:http://www.cnblogs.com/firstyi/archive/2007/10/31/944282.html,如需轉載請自行聯系原作者