Fix the build.
[castle.git] / Samples / MonoRail / SampleSite / Views / ControllersArea / home / index.vm
blob7ff7e44c23e526ceade181d267b7158b2b0ed4d0
1 <div align="center">\r
2   <h2>Controllers</h2>\r
3 </div>\r
4 \r
5 <div class="container">\r
6 \r
7 <p>\r
8   Controllers are the main entry point for your application logic. They should\r
9   invoke business methods, perform inputs validation and choose witch view\r
10   should be rendered back to the user.\r
11 </p>\r
13 <p>\r
14   To create your Controller, just extend the Controller class or SmartDispatcherController. \r
15   Each public instance method will be considered a valid and accessible action. For example:\r
16 </p>\r
18 <pre><code>\r
19 namespace Yournamespace\r
20 {\r
21   public class HomeController : Controller\r
22   {\r
23         public void MyAction()\r
24         {\r
25         }\r
27         public void OtherAction()\r
28         {\r
29         }\r
30   }\r
31 }\r
32 </code></pre>\r
34 <p>\r
35 Which can then be accessed from http://yourhost/yourvirtualdir/home/myaction.castle\r
36 </p>\r
38 </div>\r
40 <h3>Properties and Methods</h3>\r
42 <div class="container">\r
44 <p>\r
45   The Controller class exposes a handful of properties and methods to common\r
46   tasks. \r
48   <h4>Properties</h4>\r
49   \r
50   <ul>\r
51     <li><strong>LayoutName</strong>: You can override </li>\r
52     <li><strong>PropertyBag</strong>: Dictionary to pass data to the view</li>\r
53     <li><strong>Session</strong>: Dictionary with a session scope</li>\r
54     <li><strong>HttpContext</strong>: Access the underlying Asp.Net HttpContext</li>\r
55     <li><strong>Request</strong>: Access a façade Request</li>\r
56     <li><strong>Response</strong>: Access a façade Response</li>\r
57   </ul>\r
59   <h4>Methods</h4>\r
60   \r
61   <ul>\r
62     <li><strong>RenderView</strong>: Choose which view should be processed</li>\r
63     <li><strong>Redirect</strong>: Send the user to another controller/action</li>\r
64     <li><strong>CancelView</strong>: Skip the view processing</li>\r
65     <li><strong>RenderText</strong>: Instead of processing a view, send the specified text</li>\r
66   </ul>\r
68 </p>\r
70 </div>\r
72 <h3>ControllerDetails attribute</h3>\r
74 <div class="container">\r
76 <p>\r
77   This attribute allows you to inform the framework about the controller's name and area.\r
79 <pre><code>\r
80 namespace Yournamespace\r
81 {\r
82   [ControllerDetails("myhome", Area="myarea")]\r
83   public class HomeController : Controller\r
84   {\r
85         public void MyAction()\r
86         {\r
87         }\r
88   }\r
89 }\r
90 </code></pre>\r
92 <p>\r
93 Which will be accessible from http://yourhost/yourvirtualdir/myarea/myhome/myaction.castle\r
94 <p>\r
97 </p>\r
99 </div>\r
101 <h3>Smart Dispatcher</h3>\r
103 <div class="container">\r
105 <p>\r
106   This Controller implementation tries to map form data to method arguments. Currently\r
107   it supports Strings, primitive types, Guid and HttpPostedFile. The inputs on your form\r
108   <b>must </b> have the same name of the method arguments.\r
110 <pre><code>\r
111 namespace Yournamespace\r
113   public class AccountController : SmartDispatcherController\r
114   {\r
115         public void Save(String name, String address, int age)\r
116         {\r
117           ...\r
118         }\r
119   }\r
121 </code></pre>\r
123 And your form will look like:\r
125 <pre><code>\r
126 Name: &lt;input type="text" name="name"&gt;\r
127 Address: &lt;input type="text" name="address"&gt;\r
128 Age: \r
129 &lt;select name="age"&gt;\r
130   &lt;option&gt;18&lt;/option&gt;\r
131   &lt;option&gt;19&lt;/option&gt;\r
132   &lt;option&gt;20&lt;/option&gt;\r
133   &lt;option&gt;21&lt;/option&gt;\r
134 &lt;/select&gt;\r
136 </code></pre>\r
138 </p>\r
140 </div>\r