日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MonoRail学习笔记十一:页面控件的填充和验证

發布時間:2023/12/6 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的MonoRail学习笔记十一:页面控件的填充和验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。