1_初识MVC

什么叫MVC

一种分层思想

M:model(模型)
V:view(视图)
C:controller(控制器)

MVC与WebForm的区别:

WebForm在浏览器里运行页面时会自动生成垃圾代码,mvc不会,(运行网页时通

过检查网页源代码可看到)
访问具体的页面的时候后面网址要加.aspx,
而mvc则不用。

页面访问的标准规则

Mvc是通过控制器来访问页面的,先访问控制器,再访问页面。

访问方法:/控制器名字(控制器所在类的类名前部分)/action名字(对应的一个视图)

页面访问的特殊情况

①跨控制器访问
原理:创建一个控制器,该控制器可以没有对应的内容视图,在该控制器里使用RedirectToAction方法访问另一个控制器类里的控制器,这样就完成了跨控制器访问,但是,如果访问的另一个控制器也没有对应的内容视图的话就会跳转到404页面。
实际代码如下:

public ActionResult ToNews()//跨控制器访问,这个控制器会调用NewsController类里的Index()控制器
{
    return RedirectToAction("Index", "News");//News代表NewsController类对应的文件夹(控制器类的名称)
}
//在地址栏调用http://localhost:54575/Home/ToNews即可

②同一个控制器类中跨视图访问(访问一个控制器类里的不同视图).
只需要调用不同视图的控制器即可访问不同的页面,因为这些控制器的视图在同一个文件夹下,该文件夹就是这些控制器所在类对应的文件夹,如下所示。

/// <summary>
        /// 同一个控制器类中跨视图访问,这个控制器会调用About()控制器
        /// </summary>
        /// <returns></returns>
        public ActionResult ToAbout()
        {
            return RedirectToAction("About");
        }
        /// <summary>
        /// 同一个控制器类中跨视图访问2,这个控制器会调用About()控制器
        /// </summary>
        /// <returns></returns>
        public ActionResult ToAbout2()
        {
            return View("About");
        }
        /// <summary>
        /// 传路径,可实现跨控制器或跨视图访问
        /// </summary>
        /// <returns></returns>
        public ActionResult ToAbout3()
        {
            return View("~/Views/News/Index.cshtml");
        }

创建MVC项目步骤

①选择ASP.NET MVC 4 Web应用程序
②确定之后选择创建项目的视图引擎为Razor

③在Controllers文件夹里创建控制器类,创建控制器类的名字以Controller结尾

④在Views文件夹里创建以你创建的控制器类名字的Controller之前的名字为文件夹,里面存视图,这个视图文件夹里放你创建的控制器类里的控制器所要用的内容视图,一个控制器类对应一个视图文件夹。这个文件夹的名字可在选择不同视图时当控制器类的名字。

⑤在控制器类里就可以创建控制器了,如果要为控制器创建视图,可以直接右键添加视图,也可以在控制器类所对应的视图文件夹下手动以要创建视图的控制器的名字作为视图名字创建视图,视图名和控制器名应该一致。
比如上面的视图及控制器所在的文件夹和类如下图所示:
image
⑥可以在App_Start文件夹下的RouteConfig类里面修改默认启动项。

总结

在mvc里,只能通过触发控制器来访问网页,即使在地址栏里输入你项目里的某个网页,访问的时候其实也是调用了触发器了的,然后再通过触发器来访问网页每个控制器类都对应了一个以控制器类前部分名字为名字的文件夹,这个文件夹下用来存当前控制器类里的控制器的内容视图。实际上调用控制器所在类里的控制器来执行内容视图的时候控制器都会在控制器类所对应的文件夹里找控制器对
应的视图,没有则返回404页面。
项目中Models文件夹专门用来存自己需要的对象的类。

在控制器上面可以限制接受什么类型的请求,如下图,表示接受post请求;
image

也可以设置返回的是什么请求:如下图,表示任意类型的请求
image

posted @ 2022-01-10 17:52  青仙  阅读(45)  评论(0编辑  收藏  举报