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学习笔记十一:页面控件的填充和验证
</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文件中定义就可以了:
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学习笔记十一:页面控件的填充和验证        [ValidateNonEmpty]
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学习笔记十一:页面控件的填充和验证<html>
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学习笔记十一:页面控件的填充和验证
</html>
当浏览 http://localhost:***/validator/index.rails 在什么也不输的情况下直接点确认,会报错:
MonoRail学习笔记十一:页面控件的填充和验证

这样,我们几乎一句检查的代码都没写,就可以达到检查的效果了
当然,默认的报错信息是英文的,我们可以修改如下定义:
MonoRail学习笔记十一:页面控件的填充和验证        [ValidateNonEmpty("不能为空", FriendlyName="姓名")]
MonoRail学习笔记十一:页面控件的填充和验证        
public string Name
MonoRail学习笔记十一:页面控件的填充和验证        
{
MonoRail学习笔记十一:页面控件的填充和验证            
get return name; }
MonoRail学习笔记十一:页面控件的填充和验证            
set { name = value; }
MonoRail学习笔记十一:页面控件的填充和验证        }
那么在姓名列没输入时会报错:姓名: 不能为空

其实User类的定义就相当于一张表的Model,在Monorail中把Model定义好,就可以达到验证的功能了



    本文转自永春博客园博客,原文链接:http://www.cnblogs.com/firstyi/archive/2007/10/31/944282.html,如需转载请自行联系原作者

上一篇:《Android游戏开发详解》——第2章,第2.18节使用Java API中的对象


下一篇:贵阳市交通大数据中心