MVC应用程序里的URL请求是通过控制器Controller处理的,不管是请求视图页面的GET请求,还是传递数据到服务端处理的Post请求都是通过Controller来处理的,先看一个简单的Controlller:
是个DerivedController,那么对应处理的URL就是这样的:localhost:1042/Derived/Index,并且Index这个Action指定了返回的视图是MyView,而不是同名的Index视图,那么就需要新建一个视图MyView。在Index这个Action方法内右键 - 添加视图 - MyView,或者在解决方案的Views目录下新建一个Derived目录,再右键 - 新建视图 - MyView:
直接Ctrl+F5运行程序浏览器定位到的url是:localhost:1042,看看路由的定义:
注意路由的最后一行:new { controller = "Home", action = "Index", id = UrlParameter.Optional }
都给默认值了,那么URL:localhost:1042 其实就是:localhost:1042/Home/Index id是可选参数。
localhost:1042/Home/Index这个Url找的Controller自然是HomeController,Index对应的是HomeController下的Index这个Action,显然没有HoomeController,自然会报404错。
解决方法:
1.把路由的默认值修改成:
2.在浏览器的url栏里手动输入:localhost:1042/Derived/index
可以通过上下文对象Context取一些参数:
跟普通的WebForm里一样,可以通过Request.Form接收传递过来的参数:
取URL里/路由的参数:
给Controller传参:
对应的a标签是这样的:
@Html.ActionLink("查看天气(传参)", "ShowWeatherForecast", new { city = "北京", forDate = @DateTime.Now })
再添加对应的视图:
运行下程序ShowWeatherForecast视图就显示了:
要查询的是:北京 的天气,查询的时间是:2013/11/25 21:08:04
当然也可以不传参但是提供默认值:
没有传city,看Controller:
视图显示:
要查询的是:合肥 的天气,查询的时间是:2013/11/25 21:16:35
默认值已经起作用了。
控制器里获取路由数据:
自然浏览器就会显示:Controller: Derived, Action: index
Action里实现跳转:
使用Response.Redirect实现跳转还比较偏WebForm化,MVC里更应该这么跳转:
之前都是类似的Action都是Return的View这里却Return的却是RedirectResult,这就得看方法的返回值了,方法的返回值是ActionResult,并不仅仅是ViewResult,可以理解为ActionResult是ViewResult和RedirectResult等等的基类。
这里甚至可以直接返回视图文件的物理路径:
常用的Action返回值类型有:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauADNldjNlRWN4QDMjJDMhJzY4cDO0gDN1kTOyIjYmBjMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
跳转到别的Action:
上面的方法是跳转到当前Controller下的另外一个Action,如果要跳转到别的Controller里的Action:
返回普通的Text数据:
返回XML格式的数据:
返回JSON格式的数据(常用):
文件下载:
触发这个Action就会返回一个文件下载提示:
返回HTTP状态码:
返回RSS订阅内容:
触发这个Action就会浏览器机会显示:
<a href="http://files.cnblogs.com/oppoic/zy_ControllersAndActionsDemo.zip" target="_blank">本文源码</a>
<a href="http://www.cnblogs.com/oppoic/p/ef_code_first_dbcontext.html#title03" target="_blank">系列文章导航</a>