一、基础
在vici mvc WEB 应用程序里,没发送一个网页请求首先经过它对应的控制器的Run方法。这个方法一般有接受请求,执行方法,显示静态网页的功能。
控制器类应该继承Controller:
请注意 public void Run()方法。这是个默认执行方法,当然,你也可以制定某一个方法为执行方法,这些我们下面会讲到。
默认,一个控制器会呈现一个和它同名的静态网页。在上面的例子中,视图HomePage会嵌套在模版master中显示。
控制器也可以想视图传送数据,方法是调用ViewDate属性:
二、特殊视图定义
这里有俩种方法告诉控制器呈现那个视图:
1、在控制器类或者某个方法上面加上[View("")]属性
2、调用RenderView(...)方法
[View("")]属性会告诉控制器类或者某个方法哪个视图会呈现,并且视图名称不能包括“.htm”后缀,你可以写相对路径,如果不那样做的话,控制器会在模版文件夹的根目录下查找对应名字的视图:
这第二重方法就是通过调用一个参数为视图名称RenderView(...)方法,请记住它的参数是唯一的也是必须的,它容许你随时改变控制器要呈现的视图:
你在调用RenderView()时并不会立即执行,它只是告诉vici 框架在控制器类执行完毕后呈现什么视图,当然,这也就容许你重复地调用RenderView()方法,只有最后调用地才会被执行。
改变母板也可以通过添加 [Layout(...)]属性,或者调用ChangeLayout(...)方法来执行,跟视图显示一个道理。
三、有用的几个方法
Controlle基类定义了几个有用的方法:
1、ispost()
完整定义:bool IsPost();
如果传输方式是“post”则返回true;
这个方法在static WebAppContext class中也很有用;
2、IsPost(Controllername)
完整定义:bool IsPost(string controlName);
如果传输方式是“post”并且传递的参数包括一个非空的controller 名字时返回true;它用来检验submit是否被点击非常有效。
这个方法在static WebAppContext class中也很有用。
3、Redirect(newUrl)
完整定义:void Redirect(string newUrl);
它是 Response.Redirect()的另一种写法,它会立即转到指定的新的网址,url可以是相对地址也可以是绝对地址(以"~/"开始)。
四、控制器(Controller)和URL之间的映射关系
Controller按照影射图映射相应的URL.默认的影射图如下:
我们也可以在控制器类或者某个方法上面通过定义[url(....)]属性来定义一个特殊的映射关系:
注意,这里的url路径必须是相对的,相对模版根目录。
在你通过[url()]属性设置新的映射时,实际上你已经在默认的映射图里添加了这个映射关系,但是这些关系在映射图里没有被真正定义,也就是说是临时的,所以在使用的时候一定要小心。
五、BeforeAction/AfterAction方法
你可以自己定义方法在控制器类前或者后执行,默认的控制器类执行方法是Run().
通过给方法添加[BeforeAction]实现在RUN()方法之前执行,通过给方法添加[AfterAction]属性实现在RUN()方法之后执行。BeforeAction and AfterAction方法可以是Private,但最好是Public.
[BeforeAction]的另一个用途就是在你呈现一个视图之前添加javascript代码进来。你可以调用RegisterJavascript()方法在[BeforeAction]。
六、在程序运行中建立一个控制器类
Vici MVC容许你在一个方法中定义一个控制器类:
未完待续: