【ASP.NET】MVC5 + EF6(三)

MVC框架内容解析

一、流程说明

一个MVC项目是由M-Model-模型、V-View-视图、C-Controller-控制器这三部分组成。关系图如下所示
【ASP.NET】MVC5 + EF6(三)
说明:
1.用户发起的请求首先会到达控制器Controller。它可以处理浏览器发来的请求,从模型(Model)中获取数据,然后将处理后的数据通过视图(View)发送给浏览器。
2.Controllers文件夹用来存放所有控制器。这个不是强制规定,但是这是约定俗成的习惯。
3.控制器里的方法叫做动作(Action),这里的控制器就包含了一个叫做Index的Action。这个Action可以向浏览器发送一个字符串,浏览器会显示这个字符串。

二、路由控制和页面调用流程

2.1 通过路由来访问控制器及其Action

怎么写url能访问到我想要访问的控制器呢?
要想正确访问路由器,就得知道路由规则。它被写在解决方案的App_Start文件夹下的RoutConfig.cs文件中。顾名思义,这是路由配置文件。
【ASP.NET】MVC5 + EF6(三)

代码中黄色标记出的两行就是路由规则的关键所在。
第一行的意思是通过 “http://主机名:端口号/控制器名/Action名/参数id” 可以调用这个控制器的Action并且这个Action带有参数id。

2.2 页面的调用流程:

浏览器通过url: “http://主机名:端口号/控制器名/Action名/参数id” 发出请求。由RouteConfig.cs解析路由,匹配规则url: “{controller}/{action}/{id}”,得出要访问Controller下的Index Action。然后Index Action返回一个View,其对应的View是在Views文件夹下的某个文件夹里的Index.cshtml文件。此文件又加载"~/Views/Shared/_Layout.cshtml"模板,渲染页面后返回浏览器,显示页面中的内容。

三、ViewBag

如果View不接受任何参数,那么这个页面只能是一个静态页面。想要在Controller调用View时向其传递参数,就要用到ViewBag。
ViewBag是一个很神奇的东西,它是一个动态对象。简单点说就是你可以给它添加任何属性,这个属性可以是任何类型。
ViewBag的主要用途就是在Controller里给ViewBag添加属性值,并在View中读取这些值并显示出来。

HomeController.cs文件内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace EFDemo1.Controllers
{
    public class HomeController : Controller
    {
       public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}

与HomeController.cs文件对应的views/Home/Contact.cshtml文件内容:

@{
    ViewBag.Title = "Contact";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>

四、Razor

4.1Razor是什么?

  • MVC中view文件的后缀名都是.cshtml。这是什么文件呢?顾名思义,cshtml = cs + html,就是一个包含C Sharp(C#)代码的HTML文件。
    既然文件包含原本HTML文件里的客户端代码和C#这样的服务器端代码,我们就得想个办法区分这两种代码。这里我们就需要Razor。
  • Razor 是一种允许向网页中嵌入基于服务器的代码(Visual Basic 和 C#)的标记语言(语法)。
    当网页被写入浏览器时,基于服务器的代码能够创建动态内容。在网页加载时,服务器在向浏览器返回页面之前,会执行页面内的基于服务器代码。由于是在服务器上运行,这种代码能执行复杂的任务,比如访问数据库等。
  • Razor 基于 ASP.NET,它为 web 应用程序的创建而设计。它拥有传统 ASP.NET 标记的能力。

4.2 C# 的主要 Razor 语法规则

  • Razor 代码封装于 @{ … } 中
  • 行内表达式(变量和函数)以 @ 开头
  • 代码语句以分号结尾
  • 字符串由引号包围
  • C# 代码对大小写敏感
  • C# 文件的扩展名是 .cshtml
实例
<!-- 单行代码块 -->
@{ var myMessage =	"Hello World"; }

<!-- 行内表达式或变量 -->
<p>The value of myMessage is: @myMessage</p> 

<!-- 多行语句代码块 -->
@{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Here in Huston it is: " + weekDay;
}
<p>The greeting is: @greetingMessage</p>

4.3 Razor的注释

4.3.1 Razor的的多行注释 @*注释内容*@。
@*{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Here in Huston it is: " + weekDay;
}*@
4.3.2 Razor的单行注释,在行首写@*,行尾写*@,如下所示。
@* A one line code comment *@

4.4 Razor的三种基本形式

Razor通过三种标记方式来确定指定区域的代码是服务器端代码:
1.行内(Inline)标记
2.单行(Single Line)标记
3.多行(Multi-Line)标记

4.5 在服务器代码里嵌入html代码…

一共三种方法:
1.在Razor标记的代码中如果有成对的html标记,则这个标记及其内容会被当作普通文本输出。如: <p>var name2 = “Slark”;</p>
2.在Razor标记的代码中如果有"@:",则其后的一行代码会被当作普通文本输出。如上面的 @:var name3 = “Slark”;<br />
3.在Razor标记的代码中如果有<text>…</text>标记,则其内容会被当作普通文本输出。如上面的 <text> var name4 = “Slark”;<br /> var name5 = “Slark”; </text>