【ASP.NET】MVC5 + EF6(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ght886/article/details/82849325

MVC框架内容解析

一、流程说明

1.1 一个MVC项目是由M-Model-模型、V-View-视图、C-Controller-控制器这三部分组成。关系图如下所示

在这里插入图片描述
说明:
1.首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果,并通过视图呈现给用户,实现人机数据之间的交互。
2.Controllers文件夹用来存放所有控制器。这个不是强制规定,但是这是约定俗成的习惯。
3.控制器里的方法叫做动作(Action),这里的控制器就包含了一个叫做Index的Action。这个Action可以向浏览器发送一个字符串,浏览器会显示这个字符串。

1.2 MVC或是类似于这种模式的架构优势

1.各施其职,互不干涉

在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。

2.有利于开发中的分工

在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。

3.有利于组件的重用

分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。

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

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

怎么写url能访问到我想要访问的控制器呢?
要想正确访问路由器,就得知道路由规则。它被写在解决方案的App_Start文件夹下的RoutConfig.cs文件中。顾名思义,这是路由配置文件。
在这里插入图片描述

代码中黄色标记出的两行就是路由规则的关键所在。
第一行的意思是通过 “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>

猜你喜欢

转载自blog.csdn.net/ght886/article/details/82849325