套种间作,也挺有意思的——近来学习感悟。DRP学习的同一时候,折腾了点曾经不曾学习可是却非常多次耳闻过的东西——Asp.Net中的MVC架构模式。

一、是什么?

  

  MVC,即(Model-View-Controller。模型—视图—控制器模式)。和三层类似,用于表示一种软件架构模式。在这样的模式下,将系统的实现分为模型Model,视图View,控制器Controlller。

当中Model:对数据库的操作和一般的业务逻辑。

View:负责做出和用户交互的显示;Controller:处理Request和Response请求,是View层訪问Model层的中介。

二、详细实现。

 

 通过一个详细的样例来看MVC的详细实现

  首先:新建一个MVC 3 web应用程序

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdsZWlsZWk0ODY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

 PS:MVC3和MVC4,我查阅了相关的资料,自己的理解是:在总体的架构和实现上没有太大的变化。变化的仅仅是当中详细的一个类或者接口等变化。

 由于其大致流程是Request请求——→Controller——→Model然后返回给View进行显示,所以从最底层開始实现。

1)Model

 在Model目录内建立一个Login_BS类。由于仅仅是简单实现。所以并没有进行对数据库进行操作。仅仅是了解MVC实现流程和原理。

<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"> </span><span style="font-size:14px;">public class Login_BS    {
public bool Login(string username, string password)
{
if (username == "1" && password == "1")
{
return true;
}
else
{
return false;
}
}
}
</span></span>

 2)Controllers 

然后在Controllers 目录上右键,加入控制器

 注意:当中Controller前面部分为改控制器被调用的名称,也就是表单提交的地方为Login

  其详细代码例如以下:

<span style="font-size:18px;">   </span><span style="font-family:KaiTi_GB2312;font-size:14px;">public class LoginController : Controller
{
//
// GET: /Login/ public ActionResult Index()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]//表单提交方式
public void index(string username, string password)
{
Models.Login_BS loginbs = new Models.Login_BS();
//username = Request.QueryString["username"];这是get方式提交获取数据
//password = Request.QueryString["password"];
if (loginbs.Login(username, password))
{
Response.Write("登陆成功" + username);
}
else
{
Response.Write("登录失败" + username);
}
} }</span><span style="font-size:18px;">
</span>

  然后在当中的Index()方法右键加入视图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdsZWlsZWk0ODY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  之后。在View目录以下,会自己主动多出一个Login目录。在Login文件以下,会有一个名称为Index(加入视图时自己取得名字)后缀名为cshtml的文件,这就是我们加入的控制器所相应的View视图。

加入详细的表单和控件:

详细代码例如以下:

  3)View

<span style="font-family:KaiTi_GB2312;font-size:14px;">View视图代码:
@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<title>Index</title>
</head>
<body>
<div>
<form action="/Login" method="post">
<p>用户名:<input type="text" name="username" /></p>
<p>密码:<input type="password" name="password" /></p>
<p>
<input type="submit" value="登陆" /></p>
</form>
</div>
</body>
</html>
</span>

 4、自己理解

 直接执行程序,我们会发现404页面,为什么明明有View视图却不显示?事实上,这涉及到MVC模式的详细分工问题。就像在DRP中Model2模式和同学讨论的那样:严格 model2模式(MVC)模式下JSP直接绘制好的页面是不存在的?由于每一个须要显示的页面,都必须经由一个servlet进行处理之后才由jsp进行绘制出来。也就是不訪问servlet,就不会有相应的jsp绘制好的Html页面(纯属自己的理解。如有不允许见能够交流)。回到Asp.net
中,MVC中,用户訪问的地址并不映射到server中相应的文件,而是映射到相应Control里相应的ActionMethod,由ActionMethod来决定返回用户什么样的信息。而把用户訪问的地址相应到相应的Action(当然也能够是相应的文件)的工作有路由系统完毕,这当中很多复杂的处理由.net自己主动完毕,而开发人员须要告诉.net用户的訪问地址和相应Action的详细映射关系。我们直接执行程序,并没有映射到相应的Action方法。因此显示404页面也就非常正常了。

   假设我们想要显示出详细页面。

须要再地址栏中增加相应的请求訪问方法Action方法就能够了,也就是我们表单提交的地址/Login结果就能够出来了。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdsZWlsZWk0ODY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

三、对照三层:

  一个非常明显的差别:相对照与三层,MVC架构模式中,是没有aspx.cs文件的。这也是MVC模式极力避免的。由于假设页面假设有代码。就自然包括了逻辑,那么就不是MVC了。

在MVC里面,视图(View)顾名思义,仅仅是显示内容的一个载体。它自己要不要显示,要显示什么内容,所有由控制器(Controller)决定。

这样最明显的一个优点就是:实现View和Controllers的解耦。

  还有一个在于实现原理(流程)的不同:

   一般aspx实现:

   

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdsZWlsZWk0ODY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  而MVC则是:

   保留一个问题:View是经过Controller的‘允许’和Model交互?还是View和Controller交互,而Controller和Model交互?

.Net MVC的学习(一)的更多相关文章

  1. ASP.NET MVC 5 学习教程:快速入门

    起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...

  2. ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解

    原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details 方法 打开M ...

  3. ASP.NET MVC 5 学习教程:添加验证

    原文 ASP.NET MVC 5 学习教程:添加验证 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...

  4. ASP.NET MVC 5 学习教程:数据迁移之添加字段

    原文 ASP.NET MVC 5 学习教程:数据迁移之添加字段 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符 ...

  5. ASP.NET MVC 5 学习教程:添加查询

    原文 ASP.NET MVC 5 学习教程:添加查询 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...

  6. ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解

    原文 ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 ...

  7. ASP.NET MVC 5 学习教程:使用 SQL Server LocalDB

    原文 ASP.NET MVC 5 学习教程:使用 SQL Server LocalDB 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 ...

  8. ASP.NET MVC 5 学习教程:生成的代码详解

    原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  9. ASP.NET MVC 5 学习教程:通过控制器访问模型的数据

    原文 ASP.NET MVC 5 学习教程:通过控制器访问模型的数据 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连 ...

  10. ASP.NET MVC 5 学习教程:创建连接字符串

    原文 ASP.NET MVC 5 学习教程:创建连接字符串 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

随机推荐

  1. Mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。

    将select出的结果再通过中间表select一遍,这样就规避了错误.注意,这个问题只出现于mysql,mssql和oracle不会出现此问题. mysql中You can't specify tar ...

  2. lightoj--1294--Largest Box(三分)

    Largest Box Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Sta ...

  3. centos 出现的问题

    1.DNS问题,导致yum没得源 echo "nameserver 8.8.8.8">>/etc/resolv.conf 2.CentOS 7最小化安装后找不到‘ifc ...

  4. Spark RDD概念学习系列之Pair RDD的transformation操作

    不多说,直接上干货! Pair RDD的transformation操作 Pair RDD转换操作1 Pair RDD 可以使用所有标准RDD 上转化操作,还提供了特有的转换操作. Pair RDD转 ...

  5. [转]C# 位域[flags]

    .NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,例如: [Flags]   enu ...

  6. iframe刷新以及自适应高度

    A页面中的iframe链接到B页面在B页面调用这个可以刷新父页面的iframe self.location.reload(); ‍<iframe src="admin-list.htm ...

  7. TP为什么这个if判断什么都不显示?

    既不显示aaa也不显示bbb这是为什么? <if condition="isset(session('name'))"> aaa <else /> bbb ...

  8. 在IIS 10中注册自定义的IHttpModule

    环境:Visual Studio 2015, IIS Express 10, ASP.NET 4.5 演示代码:http://files.cnblogs.com/files/joe-yang/Rewr ...

  9. SpringMVC(六)POJO类作为 @RequestMapping方法的参数

    Command or form objects to bind request parameters to bean properties (via setters) or directly to f ...

  10. 页面定制CSS代码初探(一):页面变宽 文本自动换行 图片按比缩放

    初识博客 初写博客,先在设置里选了个喜欢的模板 第一眼就爱上了呢!那极简的风格,我喜欢!!但是,应用后,却发现... 纳尼!模板上右侧那张漂亮的图片呢?!我的怎么什么都没有.没有图片好难看啊,瞬间无爱 ...