MonoRail学习笔记十六:AJax在MonoRail中的使用

AJax几乎成了web2.0的一个代表,Java和Asp.net中都提供了一些AJax操作的控件。在MonoRail中也同样提供了AJax操作的共通类:AJaxHelper
AJaxHelper可以指定当文本框输入变化时调用后台代码、可以监控一个Form,当Form内控件值变化时调用后台代码、可以在点击一个按钮时调用后台代码,也可以在页面加载时就调用后台代码。当然这些调用都是采用AJax,即无刷新方式的,调用后可以自动更新页面中的一块区域的内容。
使用AJaxHelper后,几乎只要处理自己的业务逻辑就可以了,和AJax有关的代码都封装好了。下面就来看看这几种方式的使用方法:
以下的Controller类都是从SmartDispatcherController继承的
一、监控文本框
Controller代码:

MonoRail学习笔记十六:AJax在MonoRail中的使用        public void index()
MonoRail学习笔记十六:AJax在MonoRail中的使用        
{
MonoRail学习笔记十六:AJax在MonoRail中的使用        }

MonoRail学习笔记十六:AJax在MonoRail中的使用
MonoRail学习笔记十六:AJax在MonoRail中的使用        
public void InferAddress(String zip)
MonoRail学习笔记十六:AJax在MonoRail中的使用        
{
MonoRail学习笔记十六:AJax在MonoRail中的使用            RenderText(
"Address " + zip);
MonoRail学习笔记十六:AJax在MonoRail中的使用        }

其中String zip的zip变量名需要和vm页面中的控件名相同

vm代码:

 1MonoRail学习笔记十六:AJax在MonoRail中的使用<html>
 2MonoRail学习笔记十六:AJax在MonoRail中的使用<head>
 3MonoRail学习笔记十六:AJax在MonoRail中的使用$AjaxHelper.GetJavascriptFunctions()
 4MonoRail学习笔记十六:AJax在MonoRail中的使用</head>
 5MonoRail学习笔记十六:AJax在MonoRail中的使用
 6MonoRail学习笔记十六:AJax在MonoRail中的使用<body>
 7MonoRail学习笔记十六:AJax在MonoRail中的使用<form id="theform">
 8MonoRail学习笔记十六:AJax在MonoRail中的使用  请输入邮政号码:<br>
 9MonoRail学习笔记十六:AJax在MonoRail中的使用  <input type="text" name="zip" id="zip"> 
10MonoRail学习笔记十六:AJax在MonoRail中的使用  <br>
11MonoRail学习笔记十六:AJax在MonoRail中的使用  <div id="address">
12MonoRail学习笔记十六:AJax在MonoRail中的使用  </div>
13MonoRail学习笔记十六:AJax在MonoRail中的使用</form>
14MonoRail学习笔记十六:AJax在MonoRail中的使用
15MonoRail学习笔记十六:AJax在MonoRail中的使用$AjaxHelper.ObserveField("%{field='zip', frequency='2', url='inferaddress.rails', update='address', with='Form.serialize(theform)'}")
16MonoRail学习笔记十六:AJax在MonoRail中的使用
17MonoRail学习笔记十六:AJax在MonoRail中的使用</body>
18MonoRail学习笔记十六:AJax在MonoRail中的使用</html>
19MonoRail学习笔记十六:AJax在MonoRail中的使用

第三行是注册AJax的脚本,第十五行就是监听zip控件,当输入变化时自动调用inferaddress.rails,将返回的文本更新到dir id="address"的区域中

二、监控Form
vm:

MonoRail学习笔记十六:AJax在MonoRail中的使用<html>
MonoRail学习笔记十六:AJax在MonoRail中的使用
<head>
MonoRail学习笔记十六:AJax在MonoRail中的使用$AjaxHelper.GetJavascriptFunctions()
MonoRail学习笔记十六:AJax在MonoRail中的使用
</head>
MonoRail学习笔记十六:AJax在MonoRail中的使用
MonoRail学习笔记十六:AJax在MonoRail中的使用
<body>
MonoRail学习笔记十六:AJax在MonoRail中的使用
<form id="myform">
MonoRail学习笔记十六:AJax在MonoRail中的使用  姓名: 
<input type="text" name="name" id="name"> <br>
MonoRail学习笔记十六:AJax在MonoRail中的使用  地址: 
<input type="text" name="addressf" id="addressf"> 
MonoRail学习笔记十六:AJax在MonoRail中的使用  
MonoRail学习笔记十六:AJax在MonoRail中的使用  
<br>
MonoRail学习笔记十六:AJax在MonoRail中的使用  
<div id="message">
MonoRail学习笔记十六:AJax在MonoRail中的使用  
</div>
MonoRail学习笔记十六:AJax在MonoRail中的使用
</form>
MonoRail学习笔记十六:AJax在MonoRail中的使用
MonoRail学习笔记十六:AJax在MonoRail中的使用$AjaxHelper.ObserveForm("myform", 2, "FormTest.rails", "message", null)
MonoRail学习笔记十六:AJax在MonoRail中的使用
</body>
MonoRail学习笔记十六:AJax在MonoRail中的使用
</html>
MonoRail学习笔记十六:AJax在MonoRail中的使用
controller
MonoRail学习笔记十六:AJax在MonoRail中的使用        public void FormTest(string value, string addressf)
MonoRail学习笔记十六:AJax在MonoRail中的使用        
{
MonoRail学习笔记十六:AJax在MonoRail中的使用            RenderText(value 
+ "::" + addressf);
MonoRail学习笔记十六:AJax在MonoRail中的使用        }

这里的定义有点奇怪,好像是一个BUG,也可能是1.0 RC3还在开发阶段所致
对Form中的第一个控件:"姓名",在controller必须定义成"value"名才能取得值,而且取得的值也有问题(会在前面加上控件名称),看下面的执行结果:
MonoRail学习笔记十六:AJax在MonoRail中的使用

三、响应按钮事件
vm:

MonoRail学习笔记十六:AJax在MonoRail中的使用<html>
MonoRail学习笔记十六:AJax在MonoRail中的使用
<head>
MonoRail学习笔记十六:AJax在MonoRail中的使用$AjaxHelper.GetJavascriptFunctions()
MonoRail学习笔记十六:AJax在MonoRail中的使用
</head>
MonoRail学习笔记十六:AJax在MonoRail中的使用
MonoRail学习笔记十六:AJax在MonoRail中的使用
<body>
MonoRail学习笔记十六:AJax在MonoRail中的使用  
<div id="userlist">
MonoRail学习笔记十六:AJax在MonoRail中的使用  
</div>
MonoRail学习笔记十六:AJax在MonoRail中的使用  
MonoRail学习笔记十六:AJax在MonoRail中的使用$AjaxHelper.BuildFormRemoteTag("UserList.rails", "%{update='userlist'}" )
MonoRail学习笔记十六:AJax在MonoRail中的使用
<table>  
MonoRail学习笔记十六:AJax在MonoRail中的使用    
<tr>
MonoRail学习笔记十六:AJax在MonoRail中的使用        
<td>姓名:</td>
MonoRail学习笔记十六:AJax在MonoRail中的使用        
<td><input type="text" name="name"></td>
MonoRail学习笔记十六:AJax在MonoRail中的使用    
</tr>
MonoRail学习笔记十六:AJax在MonoRail中的使用    
<tr>
MonoRail学习笔记十六:AJax在MonoRail中的使用        
<td>邮件:</td>
MonoRail学习笔记十六:AJax在MonoRail中的使用        
<td><input type="text" name="email"></td>
MonoRail学习笔记十六:AJax在MonoRail中的使用    
</tr>
MonoRail学习笔记十六:AJax在MonoRail中的使用    
<tr>
MonoRail学习笔记十六:AJax在MonoRail中的使用        
<td colspan="2" align="center">
MonoRail学习笔记十六:AJax在MonoRail中的使用        
<input type="submit" value="增加">
MonoRail学习笔记十六:AJax在MonoRail中的使用        
</td>
MonoRail学习笔记十六:AJax在MonoRail中的使用    
</tr>
MonoRail学习笔记十六:AJax在MonoRail中的使用
</table>  
MonoRail学习笔记十六:AJax在MonoRail中的使用
</form>
MonoRail学习笔记十六:AJax在MonoRail中的使用
</body>
MonoRail学习笔记十六:AJax在MonoRail中的使用
</html>
MonoRail学习笔记十六:AJax在MonoRail中的使用

controller:

MonoRail学习笔记十六:AJax在MonoRail中的使用        public void UserList(String name, String email)
MonoRail学习笔记十六:AJax在MonoRail中的使用        
{
MonoRail学习笔记十六:AJax在MonoRail中的使用            IList list 
= Session["userlist"as IList;
MonoRail学习笔记十六:AJax在MonoRail中的使用            
if (list == null)
MonoRail学习笔记十六:AJax在MonoRail中的使用            
{
MonoRail学习笔记十六:AJax在MonoRail中的使用                list 
= new ArrayList();
MonoRail学习笔记十六:AJax在MonoRail中的使用            }

MonoRail学习笔记十六:AJax在MonoRail中的使用            list.Add(name 
+ "        " + email + "<br>");
MonoRail学习笔记十六:AJax在MonoRail中的使用            Session[
"userlist"= list;
MonoRail学习笔记十六:AJax在MonoRail中的使用
MonoRail学习笔记十六:AJax在MonoRail中的使用            System.Text.StringBuilder userList 
= new System.Text.StringBuilder();
MonoRail学习笔记十六:AJax在MonoRail中的使用            
for (int i = 0; i < list.Count; i++)
MonoRail学习笔记十六:AJax在MonoRail中的使用            
{
MonoRail学习笔记十六:AJax在MonoRail中的使用                userList.Append(list[i] 
as string);
MonoRail学习笔记十六:AJax在MonoRail中的使用            }

MonoRail学习笔记十六:AJax在MonoRail中的使用            RenderText(userList.ToString());
MonoRail学习笔记十六:AJax在MonoRail中的使用
MonoRail学习笔记十六:AJax在MonoRail中的使用        }

这样每次点增加按钮时,就可以不用刷新页面,直接就能把增加的信息显示在指定的位置了,当然你可以执行一些复杂的操作

四、直接调用后台代码
Controller

MonoRail学习笔记十六:AJax在MonoRail中的使用        public void User()
MonoRail学习笔记十六:AJax在MonoRail中的使用        
{
MonoRail学习笔记十六:AJax在MonoRail中的使用            RenderText(
"user :" + Session["name"as string);
MonoRail学习笔记十六:AJax在MonoRail中的使用        }

MonoRail学习笔记十六:AJax在MonoRail中的使用

vm:
MonoRail学习笔记十六:AJax在MonoRail中的使用$AjaxHelper.GetJavascriptFunctions()
MonoRail学习笔记十六:AJax在MonoRail中的使用  
<div id="user">
MonoRail学习笔记十六:AJax在MonoRail中的使用  
</div>
MonoRail学习笔记十六:AJax在MonoRail中的使用  
<script language=javascript>
MonoRail学习笔记十六:AJax在MonoRail中的使用    
new Ajax.Updater('user', '/myajax/User.rails', {}); 
MonoRail学习笔记十六:AJax在MonoRail中的使用  
</script>

可以在页面加载时就调用指定的User.rails命令,更新user区域



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


上一篇:RabbitMQ01_消息队列概述、使用场景、劣势、架构图与主要概念、Docker快速安装Rabbitmq、角色分类(二)


下一篇:如何使用SAP云平台的Notification服务给Android应用推送通知消息