天天看點

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,如需轉載請自行聯系原作者