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

        public void index()
        {
        }

        public void InferAddress(String zip)
        {
            RenderText("Address " + zip);
        }

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

vm代码:

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

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

二、监控Form
vm:

<html>
<head>
$AjaxHelper.GetJavascriptFunctions()
</head>

<body>
<form id="myform">
  姓名: <input type="text" name="name" id="name"> <br>
  地址: <input type="text" name="addressf" id="addressf"> 
  
  <br>
  <div id="message">
  </div>
</form>

$AjaxHelper.ObserveForm("myform", 2, "FormTest.rails", "message", null)
</body>
</html>

controller

        public void FormTest(string value, string addressf)
        {
            RenderText(value + "::" + addressf);
        }

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

三、响应按钮事件
vm:

<html>
<head>
$AjaxHelper.GetJavascriptFunctions()
</head>

<body>
  <div id="userlist">
  </div>
  
$AjaxHelper.BuildFormRemoteTag("UserList.rails", "%{update='userlist'}" )
<table>  
    <tr>
        <td>姓名:</td>
        <td><input type="text" name="name"></td>
    </tr>
    <tr>
        <td>邮件:</td>
        <td><input type="text" name="email"></td>
    </tr>
    <tr>
        <td colspan="2" align="center">
        <input type="submit" value="增加">
        </td>
    </tr>
</table>  
</form>
</body>
</html>

controller:

        public void UserList(String name, String email)
        {
            IList list = Session["userlist"] as IList;
            if (list == null)
            {
                list = new ArrayList();
            }
            list.Add(name + "        " + email + "<br>");
            Session["userlist"] = list;

            System.Text.StringBuilder userList = new System.Text.StringBuilder();
            for (int i = 0; i < list.Count; i++)
            {
                userList.Append(list[i] as string);
            }
            RenderText(userList.ToString());

        }

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

四、直接调用后台代码
Controller

        public void User()
        {
            RenderText("user :" + Session["name"] as string);
        }

vm:

$AjaxHelper.GetJavascriptFunctions()
  <div id="user">
  </div>
  <script language=javascript>
    new Ajax.Updater('user', '/myajax/User.rails', {}); 
  </script>

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

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

MonoRail学习笔记十六:AJax在MonoRail中的使用相关推荐

  1. MonoRail学习笔记十八:在VM中可以使用哪些系统变量

    我们知道在vm中可以直接使用Session.SiteRoot等,那么我们还可以使用哪些默认的系统变量呢? 其实可以直接在vm中使用的系统变量都是在NVelocityViewEngine类的Create ...

  2. 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  3. Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发

    Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发 Polyworks支持C#二次开发,用对应的SDK文档试着做一下开发样例. 新建一个C#项目,在解决方案中右键添加引用 ...

  4. OpenCV学习笔记(六):非线性滤波-中值、双边:medianBlur(),bilateralFilter()

    OpenCV学习笔记(六):非线性滤波-中值.双边:medianBlur(),bilateralFilter() 1.中值滤波(Median filter) 是一种典型的非线性滤波技术,基本思想是用像 ...

  5. Mr.J-- jQuery学习笔记(十六)--展开和收起动画折叠菜单的实现

    之前写过动画的隐藏与显示:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 动画隐藏与显示的一个小demo--对联广告:Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告 与动 ...

  6. C语言结构体变量和结构体数组-学习笔记(十六)

    一.结构体变量 1.结构体概念 将不同类型的数据组合成一个有机的整体即为结构体.结构体由许多组织在一起的数据项组成,这些数据项不需要属于同一类型. 2.结构体类型及结构体变量定义 (1)结构体类型声明 ...

  7. 格密码学习笔记(六):格中模运算

    文章目录 格中取模运算 CVP和格的陪集 致谢 格中取模运算 定义(格的基本区域) P⊂Rn:{P+x∣x∈L}\mathcal{P} \subset \mathbb{R}^n : \{ \mathc ...

  8. MonoRail学习笔记十五:文件上传

    在MonoRail中文件上传很简单,使用智能绑定方式后直接用HttpPostedFile类就可以进行操作了 vm文件: 1<h1 align="center">Uplo ...

  9. MonoRail学习笔记十:Controller和Url的对应关系

    在MonoRail里面存在Url和Controller之间的对应关系(当然,这种映射关系我们也可以修改),网上也有了一些说明,但好像不太完全.我再总结一下,有遗漏的,欢迎增加: 1. 普通方式     ...

最新文章

  1. JavaScript基础知识(函数)
  2. css 识别变量中的换行符_跟我一起全面了解一下CSS变量
  3. 自己动手构建iSCSI磁盘阵列
  4. 深入redis内部--实现字符串
  5. 当凡尔赛文学遇上产品经理
  6. 九、“行胜于言车胜马,负重致远向前途”
  7. POJ 2533 Longest Ordered Subsequence 动态规划
  8. [Ext JS 4] 实战之Grid, Tree Gird 动态添加列续(性能考虑)
  9. NSURLSession学习笔记(二)Session Task
  10. CodeReview 常见代码问题( 下 )
  11. dxf制作kml_如何借助GIS工具箱实现dxf转换shp格式
  12. 百度区块链 xuperchain 节点端 tps统计脚本
  13. 五种酷炫代码雨的源代码
  14. CentOS hping3安装
  15. 如何让千牛工作台/阿里旺旺不要自动升级
  16. c语言自学教程——字符函数和字符串函数
  17. 爬虫实战之抓取猫眼电影排行TOP100(使用正则表达式提取数据)
  18. xcode证书签名快速完美解决
  19. Android封装支付宝支付
  20. 中国排名前100的IT公司及中国通信企业综合实力50强(转)

热门文章

  1. python使用pyechart快速绘制各类可视化表格-包括带平均线的折线图、雷达图等等,超实用!(不断更新)
  2. 计算机网络常见英文缩写词语
  3. SVM——(三)对偶性和KKT条件(Lagrange duality and KKT condition)
  4. No 和 Not 的区别
  5. oracle解锁账户以及修改密码
  6. oracle密码锁了,Oracle 修改密码 解锁
  7. 【CCAI 2016】人工智能青年论坛:论青年正确拥抱AI的姿势
  8. ALV 下载到EXCEL里出现的问题
  9. OpenCV-Python Feature2D 特征点检测(含ORB/KAZE/FAST/BRISK/AKAZE)
  10. HDFS的常用操作--hdfs下的文件操作常用命令总结