天天看点

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

继续阅读