天天看點

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

Mono提供很多元件可以友善的處理頁面:可以自動将背景的值填充到頁面,可以自動進行Javascript驗證,可以自動在背景驗證等。這些功能都是比較實用的,可以減少很多開發

FormHelper是用來對應html頁面中Form内的tag的,可以自動填充textbox等 

ValidationHelper可以幫助我們在前台利用Javascript驗證

Castle.Components.Validator元件可以在背景對頁面輸入值進行驗證

一、自動填充頁面

普通填充:

HomeController:

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

        public void Fill1()

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

        {

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

            PropertyBag.Add("id", "1");

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

            PropertyBag.Add("name", "GSpring");

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

            PropertyBag.Add("sex", "1");

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

        }

Fill1.vm:

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

<form >

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

id:$FormHelper.TextField("id")<br />

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

name:$FormHelper.TextField("name")<br />

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

sex

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

 male:$FormHelper.RadioField("sex", "1")

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

 female:$FormHelper.RadioField("sex", "0")

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

</form>

當我們執行http://****/home/Fill1.rails時會自動将對應的值綁定到頁面中去,頁面結果為:

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

我這裡隻是實驗了常用的textbox和radiobutton,其他的也是同樣處理的

進階填充:

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

public void Index()

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

{

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

    PropertyBag.Add("list", new string[] 

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

    {

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

        "value 1", "value 2"

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

    } );

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

    PropertyBag.Add("contacts", new Contact[] 

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

    { 

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

        new Contact("john", "address 1", "phone number 1"),

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

        new Contact("mary", "address 2", "phone number 2")

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

}

Vm代碼:

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

<form action="Save.rails" method="post">

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

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

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

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

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

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

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

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

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

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

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

$FormHelper.TextField("contacts[1].name")

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

$FormHelper.TextField("contacts[1].address")

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

$FormHelper.TextField("contacts[1].phone")

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

可以自動将對象、數組中對應的值填充到頁面上去

二、前台驗證

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檔案中定義就可以了:

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

<html>

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

    <head>

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

        <title>Validation Test</title>

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

        $ValidationHelper.InstallScripts()

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

        $ValidationHelper.SetSubmitOptions(true, true, false, 0)

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

    </head>

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

    <body>

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

        <form method="post" id="demoForm" onsubmit="$ValidationHelper.GetValidationTriggerFunction()">

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

                    姓名:<input type="text" name="Name" id="Name" displayName="姓名" validators="blank" /><br />

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

                    密碼:<input type="password" name="Password" id="Password" validators="length|6" /><br />

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

                    郵件:<input type="text" name="Email" id="Email" validators="email|3" /><br />

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

                    确認郵件:<input type="text" name="Email_Confirm" id="Email_Confirm" validators="equalto|Email" /><br />

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

                <input type="submit" name="Submit" value="測試" />

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

        </form>

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

    </body>

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

</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,然後将此檔案中對應的英文提示改為中文,比如:

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

            fvalidate.i18n =

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

            {

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

                //    Validation errors

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

                errors:

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

                {

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

                    blank:        [

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

                        ["請輸入:", 0]

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

                        ],

将架構項目重新編譯

然後将vm中的第四條語句改成:

$ValidationHelper.InstallScripts("zh-cn")

這樣當再次照上面的步驟執行時會彈出一個對話框報錯:請輸入:姓名

三、Castle.Components.Validator背景驗證使用

ValidatorController.cs代碼:

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

    public class User

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

        private int id;

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

        private string name, email, password, confirmation;

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

        public User()

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

        public User(string name, string email)

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

            this.name = name;

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

            this.email = email;

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

        public int Id

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

            get { return id; }

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

            set { id = value; }

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

        [ValidateNonEmpty]

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

        public string Name

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

            get { return name; }

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

            set { name = value; }

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

        [ValidateNonEmpty, ValidateEmail]

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

        public string Email

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

            get { return email; }

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

            set { email = value; }

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

        public string Password

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

            get { return password; }

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

            set { password = value; }

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

        [ValidateSameAs("Password")]

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

        public string Confirmation

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

            get { return confirmation; }

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

            set { confirmation = value; }

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

    }

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

    public class ValidatorController : SmartDispatcherController

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

        public ValidatorController()

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

        public void Index()

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

        public void Test([DataBind("user", Validate = true)] User user)

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

            if (HasValidationError(user))

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

                Flash["user"] = user;

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

                Flash["summary"] = GetErrorSummary(user);

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

                RedirectToReferrer();

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

            }

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

            else

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

                //其他操作

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

                CancelView();

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

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

index.vm:

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

<body>

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

$FormHelper.FormTag("%{action='Test', immediate='true', useLabels='true'}")

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

#if($summary)

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

<p>

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

    <div>

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

    發生以下錯誤:

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

    </div>

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

    #foreach($propName in $summary.InvalidProperties)

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

    $propName: #foreach($msg in $summary.GetErrorsForProperty($propName)) $msg #end <br/>

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

    #end

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

</p>

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

#end

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

    姓名:$FormHelper.TextField("user.name")<br />

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

    郵件:$FormHelper.TextField("user.email")<br />

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

    密碼:$FormHelper.PasswordField("user.password")<br />

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

    确認密碼:$Form.PasswordField("user.confirmation")<br />

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

<input type="submit" value="确認" />

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

$FormHelper.EndFormTag()

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

</body>

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

這樣,我們幾乎一句檢查的代碼都沒寫,就可以達到檢查的效果了

當然,預設的報錯資訊是英文的,我們可以修改如下定義:

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

        [ValidateNonEmpty("不能為空", FriendlyName="姓名")]

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

那麼在姓名列沒輸入時會報錯:姓名: 不能為空

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

    本文轉自永春部落格園部落格,原文連結:http://www.cnblogs.com/firstyi/archive/2007/10/31/944282.html,如需轉載請自行聯系原作者

上一篇: jquery01

繼續閱讀