天天看点

MonoRail学习笔记七:页面交互的输入输出方式总结

MonoRail和WebForm很大的一个区别就是没有使用viewstate,不能使用WebForm中的服务器控件。

所以页面的取值、赋值都要由我们自己控制,当然MonoRail也提供了很多种页面交互的方式

这篇笔记主要考虑页面之间的传取值,对于Application、Session、Cookie等不做讨论

下面列出我看到的一些方式,有遗漏的地方,欢迎补充。

注:对于中文可能乱码的情况:

1、需要把如下的nvelocity.properties文件放入views/ 下:

    input.encoding=GB2312

    output.encoding=GB2312

2、在web.config中指定中文编码:

  <globalization requestEncoding="GB2312" responseEncoding="GB2312"/>

取值方式:

MonoRail学习笔记七:页面交互的输入输出方式总结

测试Html文件

1、 最原始的Request方式:

MonoRail学习笔记七:页面交互的输入输出方式总结

        public void Index()

MonoRail学习笔记七:页面交互的输入输出方式总结

        {

MonoRail学习笔记七:页面交互的输入输出方式总结

            string id = Request.Form.Get("id");

MonoRail学习笔记七:页面交互的输入输出方式总结

            string name = Request.Form.Get("name");

MonoRail学习笔记七:页面交互的输入输出方式总结

            string age = Request.Form.Get("age");

MonoRail学习笔记七:页面交互的输入输出方式总结

            string birthday = Request.Form.Get("birthday");

MonoRail学习笔记七:页面交互的输入输出方式总结

        }

2、 智能绑定方式

我们的controller需要从SmartDispatcherController继承:

    public class ServletController : SmartDispatcherController

然后就可以直接定义方法:

MonoRail学习笔记七:页面交互的输入输出方式总结

        public void Index(int id, string name, int age, DateTime birthday)

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

就会自动将值作为参数绑定

另外,如果我们有如下的一个类:

MonoRail学习笔记七:页面交互的输入输出方式总结

    public class User1

MonoRail学习笔记七:页面交互的输入输出方式总结

    {

MonoRail学习笔记七:页面交互的输入输出方式总结

        private int _id;

MonoRail学习笔记七:页面交互的输入输出方式总结

        public int Id

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            get { return _id; }

MonoRail学习笔记七:页面交互的输入输出方式总结

            set { _id = value; }

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        private string _name;

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        public string Name

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            get { return _name; }

MonoRail学习笔记七:页面交互的输入输出方式总结

            set { _name = value; }

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        private int _age;

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        public int Age

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            get { return _age; }

MonoRail学习笔记七:页面交互的输入输出方式总结

            set { _age = value; }

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        private DateTime _birthday;

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        public DateTime Birthday

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            get { return _birthday; }

MonoRail学习笔记七:页面交互的输入输出方式总结

            set { _birthday = value; }

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

    }

在绑定时可以直接绑定到这个类上面去:

MonoRail学习笔记七:页面交互的输入输出方式总结

        public void Index([DataBind("user")]User1 user)

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

同时开始时的测试html也要做修改:

MonoRail学习笔记七:页面交互的输入输出方式总结

<html>

MonoRail学习笔记七:页面交互的输入输出方式总结

<head>

MonoRail学习笔记七:页面交互的输入输出方式总结

    <title>测试页面</title>

MonoRail学习笔记七:页面交互的输入输出方式总结

</head>

MonoRail学习笔记七:页面交互的输入输出方式总结

<body>

MonoRail学习笔记七:页面交互的输入输出方式总结

<form action="/index.rails" method="post" >

MonoRail学习笔记七:页面交互的输入输出方式总结

    ID:<input type="text" name="user.id" value="1"/><br />

MonoRail学习笔记七:页面交互的输入输出方式总结

    姓名:<input type="text" name="user.name" value="姓名"/><br />

MonoRail学习笔记七:页面交互的输入输出方式总结

    年龄:<input type="text" name="user.age" value="22"/><br />

MonoRail学习笔记七:页面交互的输入输出方式总结

    生日:<input type="text" name="user.birthday" value="2007-1-1"/><br />

MonoRail学习笔记七:页面交互的输入输出方式总结

    <input id="Submit1" type="submit" value="submit" />

MonoRail学习笔记七:页面交互的输入输出方式总结

</form>

MonoRail学习笔记七:页面交互的输入输出方式总结

</body>

MonoRail学习笔记七:页面交互的输入输出方式总结

</html>

MonoRail学习笔记七:页面交互的输入输出方式总结

加了一个前缀user.

另外User1类中的属性名是不区分大小写的,还有当输入的日期格式不合法时,会赋默认值0001-1-1

3、Params方式

MonoRail学习笔记七:页面交互的输入输出方式总结

            string aa = Params["id"];

MonoRail学习笔记七:页面交互的输入输出方式总结

            string aa = Params["name"];

Params属性中不光保存有页面的值,还有Http头信息的,比如Params["REMOTE_HOST"]就可以取得远程主机的名称

将值传入页面

1、直接使用Request对象

使用Request对象可以直接取得上一个页面输入的值,在vm中显示

vm中:

    $Request.Form.Get("birthday")

2、使用Flash对象

Flash对象的使用和下面的PropertyBag对象基本相同

最大的一个区别就是Flash对象是把值暂存到一个请求中的,在下一个请求中可以获得,参见如下代码:

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            PropertyBag.Add("test2", "G");

MonoRail学习笔记七:页面交互的输入输出方式总结

            Flash.Add("test", "Spring");

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            RedirectToAction("Flash1");

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        public void Flash1()

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            RenderView("display");

MonoRail学习笔记七:页面交互的输入输出方式总结

也就是把值分别放入PropertyBag和Flash中后跳转到下一个action

display.vm中:

    $test<br />

    $test2<br />

页面显示时能正确显示test的值,test2值取不到

也就是说Flash对象可以保存比如出错信息等,在下一个页面中显示

3、普通的PropertyBag方式

MonoRail学习笔记七:页面交互的输入输出方式总结

            PropertyBag.Add("name", "姓名");

MonoRail学习笔记七:页面交互的输入输出方式总结

            PropertyBag.Add("List", new String[] { "1", "2", "3" });

MonoRail学习笔记七:页面交互的输入输出方式总结

    姓名:$name<br />

MonoRail学习笔记七:页面交互的输入输出方式总结

    #foreach ($element in $list)

MonoRail学习笔记七:页面交互的输入输出方式总结

        $element<br />

MonoRail学习笔记七:页面交互的输入输出方式总结

    #end

可以传入一些标准对象,对象和数组

4、使用PropertyBag将自定义对象传入页面

    PropertyBag.Add("user", user);

    姓名:$user.name<br />

对于复合情况,比如ArrayList中保存User对象的情况也很方便:

MonoRail学习笔记七:页面交互的输入输出方式总结

            ArrayList list = new ArrayList();

MonoRail学习笔记七:页面交互的输入输出方式总结

            list.Add(user);

MonoRail学习笔记七:页面交互的输入输出方式总结

            PropertyBag.Add("list", list);

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        $element.name<br />

MonoRail学习笔记七:页面交互的输入输出方式总结

5、使用Helpers对象

对于需要在vm中调用类方法的情况,比如ServletController类中有如下方法需要在vm中被调用:

MonoRail学习笔记七:页面交互的输入输出方式总结

        public string Welcome(string str)

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            return "Welcome :" + str;

MonoRail学习笔记七:页面交互的输入输出方式总结

Index方法:

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

            Helpers.Add("Welcome", new ServletController()); 

MonoRail学习笔记七:页面交互的输入输出方式总结

主要是要把对象放入Helpers对象中去

MonoRail学习笔记七:页面交互的输入输出方式总结
MonoRail学习笔记七:页面交互的输入输出方式总结

        $Welcome.Welcome($element.name)<br />

MonoRail学习笔记七:页面交互的输入输出方式总结

另外如果这个方法在很多action中都要调用到,我们可以加入如下的类属性:

MonoRail学习笔记七:页面交互的输入输出方式总结

    [Helper(typeof(ServletController), "Welcome")]

MonoRail学习笔记七:页面交互的输入输出方式总结

    public class ServletController : SmartDispatcherController

MonoRail学习笔记七:页面交互的输入输出方式总结

如果这个方法不光是这个controller中用到,我们还可以定义一个包含此属性的父类,其他需要用到的地方直接从这个父类继承,那么在vm中就可以直接使用了

另,MonoRail也提供了一些标准的Helpers:

MonoRail学习笔记七:页面交互的输入输出方式总结

            AbstractHelper[] builtInHelpers =

MonoRail学习笔记七:页面交互的输入输出方式总结

                new AbstractHelper[]

MonoRail学习笔记七:页面交互的输入输出方式总结

                    {

MonoRail学习笔记七:页面交互的输入输出方式总结

                        new AjaxHelper(), new BehaviourHelper(),

MonoRail学习笔记七:页面交互的输入输出方式总结

                        new UrlHelper(), new TextHelper(), 

MonoRail学习笔记七:页面交互的输入输出方式总结

                        new EffectsFatHelper(), new ScriptaculousHelper(), 

MonoRail学习笔记七:页面交互的输入输出方式总结

                        new DateFormatHelper(), new HtmlHelper(),

MonoRail学习笔记七:页面交互的输入输出方式总结

                        new ValidationHelper(), new DictHelper(),

MonoRail学习笔记七:页面交互的输入输出方式总结

                        new PaginationHelper(), new FormHelper(),

MonoRail学习笔记七:页面交互的输入输出方式总结

                        new ZebdaHelper()

MonoRail学习笔记七:页面交互的输入输出方式总结

                    };

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