1: MVC基础知识
1约定
控制器约定: 1、控制器的后缀名一定是Controller结尾,同时要继承Controller父类
2、方法控制器下的方法会去查询其Views文件夹下的和控制器同名目录下的和action同名的视图
3、控制器中的action方法一定是public,否则会抛出404异常
Razor视图:
扩展名:.cshtml
@:Razor 语法 ,在@{}中所写的代码都是c#代码,并且在C#代码中可以嵌套html标签
路由规则
用于根据路由规则占位符:{controller}/{action}/{id}
注意:{controller}/{action}的名称是不能够修改的,位置可以调换,但是不建议调换
{id} 代表方法的形参名称,如果方法的型参名称与此占位符不一致,则无法将值传入
在一个action方法中返回值的写法:
1、return View() :负责返回一个视图
一、action向视图传值的方式
1、ViewData
2、ViewBag
3、TempData
4、View() :通过Model传递给视图页面的 ,所以在.cshtml中是用Model来接收的
注意点; ViewBag 本质上使用的是ViewData来传递的,所以ViewBag和ViewData存在相同key,那么后面那个的值会覆盖前面那个的值
view():本质上返回的是ViewResult,而ViewResult的父类是ViewResultBase,ViewResultBase 继承actionresult抽象类,所以能够在一个
action中通过return view() 满足方法的返回值是ActionReulet的要求
action向视图传值的本质:是通过视图引擎将ViewResult对象实例传递给WebViewPage<Tmodel> 中的 Model 和 ViewData
二、传值的几种方式
MVC中不推荐,但是可以使用
http://localhost:47368/C01ActionToView/index?id=1&name=abc
MVC推荐的方式:
http://localhost:47368/C01ActionToView/index/100
get:
post:
三、actionresult的各个子类用法
3.1、ViewResult() -->action方法中要想返回视图,则要使用ViewResult (MVC开发中用的最多)
3.2、ContentResult() -->返回内容之用(特点,可以不需要有对应的视图) Home/ContentResultDemo中有示例
3.3、JsonResult() -->可以用作ajax请求 ,注意:如果是get请求,则一定是要在Json()中写入:JsonRequestBehavior.AllowGet
3.4、FileResult() -->可以用作画验证码,也可以利用它来实现文件的下载
3.5、HttpStatusCodeResult() --》用户自己设置需要响应的状态码
3.6、JavaScriptResult 注意:JavaScript配合视图中的<script rc="/GroupInfo/JavaScriptResultDemo1">
3.7、RedirectResult():执行页面跳转本质上是在响应报文头中产生了 Location:要跳转的页面的虚拟路径 命令
3.8、RedirectToRouteResult :当系统中路由规则比较多的时候,可以由程序员指定使用哪个路由规则来生成url
四、强类型和弱类型视图
从视图在表现形式来将:
强类型视图是在视图上利用了@model 指定了具体在类型,而弱类型视图是没有被@model 指定的
从编译以后在视图类文件来看:
强类型视图,在其父类WebViewPage<T> 中的T已经指定了具体在类型,而弱类型视图在其父类WebViewPage<T> 中的T是一个object
五、ViewStart.cshtml 视图页面
MVC中执行任何一个视图之前都要先执行views文件夹下的_viewstart.cshtml的视图内容
注意点:想要上面描述成立,则在action方法中必须是以return view() 来返回视图,
如果是以PowerView() 方法来返回视图的话,则不会执行_viewstart.cshtml中的内容
ViewStart.cshtml可以在Views文件夹下的子文件夹下存在,此时只有在访问此文件夹下的视图文件的时候才会被先执行
作用:一般是存放MVC网站中所有视图公用的js,css等文件
六、LayOut.cshtml中的
Styles.Render("虚拟路径"):输出此虚拟路径下包含的物理css文件
Scripts.Render("虚拟路径"):输出此虚拟路径下包含的物理js文件
每个虚拟路径下面的物理文件是在MVC网站启动的时候就调用了Applciation_Start()
->BundleConfig.RegisterBundles() 就将每个虚拟路径映射好了具体的物理文件
作用:1、一个虚拟路径可以有多个物理文件,将来在视图上是需要调用Styles.Render()h或者Scripts.Render()可以一次性引用
多个文件,将来如果要修改任何一个文件名称,则只要修改BundleConfig.RegisterBundles()中的注册代码即刻
2、压缩js和css文件再输出 :编码 encode 这样做可以优化