MonoRail学习笔记十一:页面控件的填充和验证
FormHelper是用来对应html页面中Form内的tag的,可以自动填充textbox等
ValidationHelper可以帮助我们在前台利用Javascript验证
Castle.Components.Validator组件可以在后台对页面输入值进行验证
一、自动填充页面
普通填充:
HomeController:
{
PropertyBag.Add("id", "1");
PropertyBag.Add("name", "GSpring");
PropertyBag.Add("sex", "1");
}
Fill1.vm:
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,其他的也是同样处理的
高级填充:
{
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代码:
$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文件中定义就可以了:
<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,然后将此文件中对应的英文提示改为中文,比如:
{
// Validation errors
errors:
{
blank: [
["请输入:", 0]
],
将框架项目重新编译
然后将vm中的第四条语句改成:
$ValidationHelper.InstallScripts("zh-cn")
这样当再次照上面的步骤执行时会弹出一个对话框报错:请输入:姓名
三、Castle.Components.Validator后台验证使用
ValidatorController.cs代码:
{
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:
<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 在什么也不输的情况下直接点确认,会报错:
这样,我们几乎一句检查的代码都没写,就可以达到检查的效果了
当然,默认的报错信息是英文的,我们可以修改如下定义:
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学习笔记十一:页面控件的填充和验证相关推荐
- vs2010 学习Silverlight学习笔记(7):控件样式与模板
概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...
- JavaFX 学习笔记——窗口与控件
前言 如今比较流行的桌面gui框架有WPF.WinForm.Qt.javafx等.其中WPF和WinForm目前还只能在运行Winsows上.Qt(widget)是一个很强大的跨平台C++框架(不只是 ...
- vb.net listview 删除选定行_VBA学习笔记59-1: listview控件
学习资源:<Excel VBA从入门到进阶>第59集 by兰色幻想 本节学习Listview控件,它可以用多种视图方式显示项目的控件.由于其外形美观而且非常实用,所以使用频率很高. Lis ...
- kendo treeview 修改节点显示值_VBA学习笔记60-1: Treeview控件
学习资源:<Excel VBA从入门到进阶>第60集 by兰色幻想 本节讲Treeview控件. TreeView控件是以树形结构显示数据的控件.利用TreeView控件,可以设计出树形结 ...
- ASP.NET 学习笔记_01 广告控件的使用
广告控件的使用: 广告文件是一个XML文件,广告文件中所有的标签属性被分析后放到adProperties字典中,用以属性编辑. ads.xml 1 <?xml version="1.0 ...
- Qt学习笔记之常用控件QlistWidget
一.QListWidget Class The QListWidget class provides an item-based list widget. More... Header: #inclu ...
- Android开发学习笔记-自定义组合控件
为了能让代码能够更多的复用,故使用组合控件.下面是我正在写的项目中用到的方法. 1.先写要组合的一些需要的控件,将其封装到一个布局xml布局文件中. <?xml version="1. ...
- LVGL v8学习笔记 | 06 - label控件的使用方法
文章目录 一.label控件 1. 创建label对象 2. 设置label的文本 3. 获取label文本 4. label的大小 5. label的样式 6. label的事件 二.label控件 ...
- 【MFC】学习笔记:常用控件之组合框(Combo Box)
01.目录 目录 01.目录 02.控件介绍 03.控件的消息通知函数 04.创建组合框控件及成员函数介绍 4.1 组合框的创建 4.2 CComboBox类的主要成员函数 05.应用实例 06.总结 ...
最新文章
- 《javascript语言精粹》读书笔记(一)
- python可以做什么项目-Python可以做大项目吗?
- tableau可视化数据分析60讲(八)-tableau计算函数(重点知识)
- JS 搜索 --下拉列表
- try、catch、finally 和 throw-C#异常处理
- 【2018.4.7】模拟赛之三-ssl2384 字符串【字符串】
- kafka不使用自带zk_kafka概念扫盲
- 以前看书时记得一些笔记(二),很早了,现在再看都有些看不懂了
- 从源码角度分析android事件分发处理机制
- 苹果照片库的照片,直接拖到桌面上
- NOPI导出excel
- 【unity 】第一人称角色控制器手机虚拟双摇杆
- git reset,rebase,amend 使用实战
- 路由器、DDNS、花生壳
- 强化学习——格子游戏问题
- 全面反攻,不给割肉者任何机会
- NSDate 农历节日
- 图片上传实时预览效果
- PAT A1010 Radix
- 基于计算机视觉的手势识别技术