MVC架构学习

作为一名小小的GreenBird,学习MVC呢,已经花费了2天了,期间得到了美丽的学姐的帮助,初步整理了一下。

首先,学习MVC呢就先以一个标准的MVC的简单的例子来入手,然后根据学姐的PPT,我用vs2012建立了一个项目。

1.建立一个MVC架构的项目:

File->New Project->Visual C#->ASP.NET MVC 4 Web Application

可以直接运行这个网站

2.Adding a Controller

右键单击Controller->add->Controller(CommentControler)

public string Index()

{

return "This is my first test of <b>MVC</b>...";

}

把原来的Index方法可以注释掉。

3.在RouteConfig.cs里面有路由规则。

routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}",

defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

);

可以试验一下这个路由规则:

在新建的CommentControler里新定义一个action如下:

public string Welcome(string name, int numTimes = 1)

{

return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);

}

然后在浏览器上面

也可以改变一下路由规则:

routes.MapRoute(

name: "Cathy",

url: "{controller}/{action}/{name}/{id}"

);

改变一下Comment里面的action:

public string Welcome(string name, int ID = 1)

{

return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);

}

4.Add a folder View|Comment

引用:Layout = "~/Views/Shared/_Layout.cshtml";(可以在Share里面的要引用的东西直接拖过来稍微修改一下就可以了)

Index里面的内容是这个样子的:

@{

ViewBag.Title = "Easy";

Layout = "~/Views/Shared/_Layout.cshtml";

}

<h2>Practice of *Comments</h2>

5.修改CommentController里面的内容,

public ActionResult Index()

{

return View();

}

把此注释去掉。

6.在Share的公共模板里面修改界面的格式,menu里面增加一个超链接的文字。

(可以输入函数名称,把鼠标放在上面看下面的参数应该怎么写)

<li>@Html.ActionLink("Easy", "Index", "Comment")</li>

7.Adding a Model:Comment.cs

using System;

using System.Data.Entity;

using System.Web;

using System.ComponentModel.DataAnnotations;

using System.ComponentModel.DataAnnotations.Schema;

namespace Practice.Models

{

public class Comment

{

[Key]

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]

public int CommentID { get; set; }

public DateTime CommentTime { get; set; }

public string CommnetUser { get; set; }

public string CommenContent { get; set; }

public int ParentCommentID { get; set; }

}

}

8.在Models 里面的另外的cs文件中寻找Dbcontext,并写入:

public DbSet<Comment> Comments { get; set; }

9.在菜单栏里面找到tools->libraries package manager->package manager console

分别输入下面的命令:

Enable-Migrations//会在工程里面自动生成一个Migrations文件

Add-Migration Create_DB_DIY(自己定义的,但是没有间隔)

Update-Database

这样就在vs里面创建了一个数据库,里面有两张表,可以在View->Server Explore里面找到tables,有两张表:

可以右击表,New Query,新建查询

10.设计Easy超链接的页面Index.cshtml

<div>

<div>

<table>

<tr>

<td>

<div>

<div style="color: blue">CommnetUser</div>

<div>CommenContent</div>

<div style="color: gray; font-size: 10px;">CommentTime</div>

</div>

</td>

<td>

<div>

<input id="delete-button" type="submit" value="Delete" />

</div>

</td>

</tr>

</table>

</div>

<div>

<div>

<input name="commentUser" type="text" placeholder="User Name..." />

</div>

<div>

<textarea name="commentContent" rows="5"></textarea>

</div>

<div>

<input id="submit-button" type="submit" value="Submit" />

</div>

</div>

</div>

到了这个地方,我们就可以得到显示的页面了,但是这个时候还不能与数据库连接,需要新建Controller来控制与数据库的交互。

11.新建Controller:BaseController.cs增加内容:

public UsersContext db = new UsersContext();

另外为了和数据库进行交互,还需包含下面的using System.Web.Mvc;

using MVC4.Models;

12.修改CommentController.cs

using CommentSample.Models;

Change Controller into BaseController

public ActionResult Index()
        {
            var comments = db.Comments.OrderByDescending(c => c.CommentTime).ToList();
            return View(comments);
        }

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult CommentFunction(string commentUser, string commentContent)
        {
            if (commentUser != null && commentContent != null)
            {
                db.Comments.Add(new Comment { CommentTime = DateTime.Now, CommnetUser = commentUser, CommenContent = commentContent, ParentCommentID = 0 });
                db.SaveChanges();
            }
            return RedirectToAction("Index", "Comment");
        }

    [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteFunction(int commentId)
        {
            var comment = db.Comments.SingleOrDefault(c => c.CommentID == commentId);
            if (comment != null)
            {
                db.Comments.Remove(comment);
                db.SaveChanges();
            }
            return RedirectToAction("Index", "Comment");
        }

}

13.修改Comment/Index.cshtml:

@model List<MVC4.Models.Comment>
@using MVC4.Models
@{
    ViewBag.Title = "Easy";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div>
    <div>
        <table>
            @foreach (var comment in Model.Where(c => c.ParentCommentID == 0))
            {
                <tr>
                    <td>
                        <div>
                            <div style="color: blue">@comment.CommnetUser</div>
                            <div>@comment.CommenContent</div>
                            <div style="color: gray; font-size: 10px;">@comment.CommentTime</div>
                        </div>
                    </td>
                    <td>
                        @using (Html.BeginForm("DeleteFunction", "Comment", "FormMethod.Post"))
                        {
                            @Html.AntiForgeryToken()
                            @Html.Hidden("commentId",comment.CommentID)
                            <div>
                                <input id="delete-button" type="submit" value="Delete" />
                            </div>
                        }
                    </td>
                </tr>
            }
        </table>
    </div>
    @using (Html.BeginForm("CommentFunction", "Comment", FormMethod.Post))
    {
        @Html.AntiForgeryToken()//防止CSRS攻击
        <div>
            <div>
                <input name="commentUser" type="text" placeholder="User Name..." />
            </div>
            <div>
                <textarea name="commentContent" rows="5"></textarea>
            </div>
            <div>
                <input id="submit-button" type="submit" value="Submit" />
            </div>
        </div>
    }

</div>

这样的话就建立了一个简单的留言簿。可以输入评论人的名字,评论内容,提交后显示在页面上,页面上的每个评论都可以删除。

期间出现了问题:

The resource cannot be found.

下面的网址提供了解决方案:

http://cephas.net/blog/2005/07/14/aspnet-the-resource-cannot-be-found/

但是这个对于我来说好像并没有什么用处,Fiona学姐给我解决了这个问题,就是我没有把CSRS攻防的方法放在正确的位置上。

每个增删数据的方法对应于Controller.cs里面的一个方法,该方法上面要加上相应的防止CSRS攻防的语句。同时,在View里利用@来定义一个Action里所对应的模型,这样就可以直接在cshtml文件中调用“Model”变量。 Model其实是一个类库,封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,它可以直接访问数据库。对于一个事件,Controller首先会根据这个事件作出相应的处理,去改变View或Model。

下面是引用的一个博客的文章的一段:

原文地址:(http://blog.csdn.net/qinkeliangqin/article/details/27084639

MVC网站的访问流程:

1. 当第一个请求从客户端发起的时候,首先执行的是Global.asax中的Application_Start()方法来完成一些初始化工作,其中重要的一步是RegisterRoutes方法,这个方法指定了如何将url映射到具体的方法上,稍后详解。

2. 根据第一步中指定的映射表生成一个RouteData对象,利用这个对象来创建一个RequestContext对象。

3. MvcRouteHandler创建一个MvcHandler,并将RequestContext对象传给MvcHandler。

4. MvcHandler对象利用RequestContext对象确定一个IControllerFactory对象来创建Controller对象。

5. MvcHandler对象调用Controller对象的Execute()方法。

6. Controller的ControolerActionInvoker对象决定调用controller的哪个具体的action方法。

7. Action方法接受用户参数,执行方法,返回一个Result类型的对象。

注:其实还有很多问题没有搞清楚,以后接触的过程中会继续学习~~

参考文献:

http://www.asp.net/mvc/overview/getting-started/introduction/getting-started

http://www.cnblogs.com/zgqys1980/archive/2012/08/17/2643572.html

http://blog.csdn.net/qinkeliangqin/article/details/27084639

---恢复内容结束---

作为一名小小的GreenBird,学习MVC呢,已经花费了2天了,期间得到了美丽的学姐的帮助,初步整理了一下。

首先,学习MVC呢就先以一个标准的MVC的简单的例子来入手,然后根据学姐的PPT,我用vs2012建立了一个项目。

1.建立一个MVC架构的项目:

File->New Project->Visual C#->ASP.NET MVC 4 Web Application

可以直接运行这个网站

2.Adding a Controller

右键单击Controller->add->Controller(CommentControler)

public string Index()

{

return "This is my first test of <b>MVC</b>...";

}

把原来的Index方法可以注释掉。

3.在RouteConfig.cs里面有路由规则。

routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}",

defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

);

可以试验一下这个路由规则:

在新建的CommentControler里新定义一个action如下:

public string Welcome(string name, int numTimes = 1)

{

return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);

}

然后在浏览器上面

也可以改变一下路由规则:

routes.MapRoute(

name: "Cathy",

url: "{controller}/{action}/{name}/{id}"

);

改变一下Comment里面的action:

public string Welcome(string name, int ID = 1)

{

return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);

}

4.Add a folder View|Comment

引用:Layout = "~/Views/Shared/_Layout.cshtml";(可以在Share里面的要引用的东西直接拖过来稍微修改一下就可以了)

Index里面的内容是这个样子的:

@{

ViewBag.Title = "Easy";

Layout = "~/Views/Shared/_Layout.cshtml";

}

<h2>Practice of *Comments</h2>

5.修改CommentController里面的内容,

public ActionResult Index()

{

return View();

}

把此注释去掉。

6.在Share的公共模板里面修改界面的格式,menu里面增加一个超链接的文字。

(可以输入函数名称,把鼠标放在上面看下面的参数应该怎么写)

<li>@Html.ActionLink("Easy", "Index", "Comment")</li>

7.Adding a Model:Comment.cs

using System;

using System.Data.Entity;

using System.Web;

using System.ComponentModel.DataAnnotations;

using System.ComponentModel.DataAnnotations.Schema;

namespace Practice.Models

{

public class Comment

{

[Key]

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]

public int CommentID { get; set; }

public DateTime CommentTime { get; set; }

public string CommnetUser { get; set; }

public string CommenContent { get; set; }

public int ParentCommentID { get; set; }

}

}

8.在Models 里面的另外的cs文件中寻找Dbcontext,并写入:

public DbSet<Comment> Comments { get; set; }

9.在菜单栏里面找到tools->libraries package manager->package manager console

分别输入下面的命令:

Enable-Migrations//会在工程里面自动生成一个Migrations文件

Add-Migration Create_DB_DIY(自己定义的,但是没有间隔)

Update-Database

这样就在vs里面创建了一个数据库,里面有两张表,可以在View->Server Explore里面找到tables,有两张表:

可以右击表,New Query,新建查询

10.设计Easy超链接的页面Index.cshtml

<div>

<div>

<table>

<tr>

<td>

<div>

<div style="color: blue">CommnetUser</div>

<div>CommenContent</div>

<div style="color: gray; font-size: 10px;">CommentTime</div>

</div>

</td>

<td>

<div>

<input id="delete-button" type="submit" value="Delete" />

</div>

</td>

</tr>

</table>

</div>

<div>

<div>

<input name="commentUser" type="text" placeholder="User Name..." />

</div>

<div>

<textarea name="commentContent" rows="5"></textarea>

</div>

<div>

<input id="submit-button" type="submit" value="Submit" />

</div>

</div>

</div>

到了这个地方,我们就可以得到显示的页面了,但是这个时候还不能与数据库连接,需要新建Controller来控制与数据库的交互。

11.新建Controller:BaseController.cs增加内容:

public UsersContext db = new UsersContext();

另外为了和数据库进行交互,还需包含下面的using System.Web.Mvc;

using MVC4.Models;

12.修改CommentController.cs

using CommentSample.Models;

Change Controller into BaseController

public ActionResult Index()
        {
            var comments = db.Comments.OrderByDescending(c => c.CommentTime).ToList();
            return View(comments);
        }

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult CommentFunction(string commentUser, string commentContent)
        {
            if (commentUser != null && commentContent != null)
            {
                db.Comments.Add(new Comment { CommentTime = DateTime.Now, CommnetUser = commentUser, CommenContent = commentContent, ParentCommentID = 0 });
                db.SaveChanges();
            }
            return RedirectToAction("Index", "Comment");
        }

    [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteFunction(int commentId)
        {
            var comment = db.Comments.SingleOrDefault(c => c.CommentID == commentId);
            if (comment != null)
            {
                db.Comments.Remove(comment);
                db.SaveChanges();
            }
            return RedirectToAction("Index", "Comment");
        }

}

13.修改Comment/Index.cshtml:

@model List<MVC4.Models.Comment>
@using MVC4.Models
@{
    ViewBag.Title = "Easy";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div>
    <div>
        <table>
            @foreach (var comment in Model.Where(c => c.ParentCommentID == 0))
            {
                <tr>
                    <td>
                        <div>
                            <div style="color: blue">@comment.CommnetUser</div>
                            <div>@comment.CommenContent</div>
                            <div style="color: gray; font-size: 10px;">@comment.CommentTime</div>
                        </div>
                    </td>
                    <td>
                        @using (Html.BeginForm("DeleteFunction", "Comment", "FormMethod.Post"))
                        {
                            @Html.AntiForgeryToken()
                            @Html.Hidden("commentId",comment.CommentID)
                            <div>
                                <input id="delete-button" type="submit" value="Delete" />
                            </div>
                        }
                    </td>
                </tr>
            }
        </table>
    </div>
    @using (Html.BeginForm("CommentFunction", "Comment", FormMethod.Post))
    {
        @Html.AntiForgeryToken()//防止CSRS攻击
        <div>
            <div>
                <input name="commentUser" type="text" placeholder="User Name..." />
            </div>
            <div>
                <textarea name="commentContent" rows="5"></textarea>
            </div>
            <div>
                <input id="submit-button" type="submit" value="Submit" />
            </div>
        </div>
    }

</div>

这样的话就建立了一个简单的留言簿。可以输入评论人的名字,评论内容,提交后显示在页面上,页面上的每个评论都可以删除。

期间出现了问题:

The resource cannot be found.

下面的网址提供了解决方案:

http://cephas.net/blog/2005/07/14/aspnet-the-resource-cannot-be-found/

但是这个对于我来说好像并没有什么用处,Fiona学姐给我解决了这个问题,就是我没有把CSRS攻防的方法放在正确的位置上。

每个增删数据的方法对应于Controller.cs里面的一个方法,该方法上面要加上相应的防止CSRS攻防的语句。同时,在View里利用@来定义一个Action里所对应的模型,这样就可以直接在cshtml文件中调用“Model”变量。 Model其实是一个类库,封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,它可以直接访问数据库。对于一个事件,Controller首先会根据这个事件作出相应的处理,去改变View或Model。

下面是引用的一个博客的文章的一段:

原文地址:(http://blog.csdn.net/qinkeliangqin/article/details/27084639

MVC网站的访问流程:

1. 当第一个请求从客户端发起的时候,首先执行的是Global.asax中的Application_Start()方法来完成一些初始化工作,其中重要的一步是RegisterRoutes方法,这个方法指定了如何将url映射到具体的方法上,稍后详解。

2. 根据第一步中指定的映射表生成一个RouteData对象,利用这个对象来创建一个RequestContext对象。

3. MvcRouteHandler创建一个MvcHandler,并将RequestContext对象传给MvcHandler。

4. MvcHandler对象利用RequestContext对象确定一个IControllerFactory对象来创建Controller对象。

5. MvcHandler对象调用Controller对象的Execute()方法。

6. Controller的ControolerActionInvoker对象决定调用controller的哪个具体的action方法。

7. Action方法接受用户参数,执行方法,返回一个Result类型的对象。

注:其实还有很多问题没有搞清楚,以后接触的过程中会继续学习~~

参考文献:

http://www.asp.net/mvc/overview/getting-started/introduction/getting-started

http://www.cnblogs.com/zgqys1980/archive/2012/08/17/2643572.html

http://blog.csdn.net/qinkeliangqin/article/details/27084639

时间: 2024-10-26 05:35:19

MVC架构学习的相关文章

MVC架构学习之Smarty学习——病来而蔫

前两天是五一小长假,而每次假期都想着如何如何刻苦一番,往往是自作多情.. 当然这次是有小病在身,多个借口吧. 一有病就蔫的不行...要锻炼了啊,脚估计也差不多了,游泳试试吧这周. 这次学习Smarty引擎. 一.视图引擎简介 帮助用户实现MVC中View的开发. (可以理解为View的模板 --好的视图引擎 贴近html: 语法简单易懂: 良好的缓存机制: 拓展性良好: 网络资源多 (所以先学习已有的视图引擎) --知名的 Smarty,PHPLIB 二.Smarty简介 提供了逻辑和外在内容的

MVC架构学习之EasyFirst——快点夸我爱学习~

iMooc上的MVC教程练习. MVC是PHP基础和进阶的分界点吧应该说是 一.准备 工欲善其事~ 个人环境:windows10+wamp2.5+ZendStudio12: 项目名称:MVCEasyFirst: 文件命名:testController.class.php              文件名 控制器     类文件类型 代码标准:PSR-2: 二.搭建 Controller 1 <?php 2 namespace MVCEasyFirst\Controller\test; 3 4 u

【Java架构学习】MVC和三层架构的区别

其实这篇博客的重点不是介绍三层架构,是重点介绍MVC并帮助理解MVC.学了这么久MVC发现对它的理解还存在很多误区,今天就来好好整理一下MVC. MVC即Model-View-Controller,其中M-V-C各代表什么,我想即使我不一一列举大家也都了然于胸了.因为太熟悉了,就像我们当初学习三层架构一样,时间长了U-B-D各代表什么含义信手拈来.但是我想说的是,我们是否对MVC的认识也只是停留在表面? 哎呀,还是说一下吧,不说心里难受.总所周知,在MVC中,代表的具体含义如下: M--Mode

MVC架构简介及其测试策略

最近在WEB端测试工作中陷入了瓶颈,单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的,WEB自动化测试一时半会还没有什么进展,所以决定先学习一下网站用的MVC架构,跟着教程写了一个小网站,大概也找到了WEB测试工作的几个突破口. MVC即为按照分层解耦的思想,将网站结构分成了Model(模型)-View(视图)-Controller(控制器)三层架构,三层架构的职责如下: Model层:是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据:简单来说,就是在Mod

【JAVA】基于MVC架构Java技术荟萃案例演练

基于JAVA-MVC技术的顾客管理项目案例总结 作者 白宁超 2016年6月9日22:47:08 阅读前瞻:本文源于对javaweb相关技术和资料汇总,涉及大量javaweb基础技术诸如:Servlet运行原理.Get/Post请求的区别.jsp的基本原理和运行框架.jsp的9大隐含对象的使用.MVC开发模式的使用.构建封装自己dao代码库.以及基于MVC的增删改查操作等:小结最后还有面向接口编程的多数据源配置与存储,以及工厂模式的使用.除此之外,后续文章会对cookie.session.Jav

ExtJS 4 MVC架构讲解

大规模客户端应用通常不好实现不好组织也不好维护,因为功能和人力的不断增加,这些应用的规模很快就会超出掌控能力,ExtJS 4 带来了一个新的应用架构,不但可以组织代码,还可以减少实现的内容新的应用架构遵照一个类MVC的模式,模型(Models)和控制器(Controllers)首次被引入.业界有很多种MVC架构,基本大同小异,ExtJS 4的定义如下: Model模型 是字段和它们的数据的集合,例如User模型带有username和password字段,模型知道如何持久化自己的数据,并且可以和其

从MVC框架看MVC架构的设计

转自:http://blog.csdn.net/bluishglc/article/details/6690693 从MVC框架看MVC架构的设计 尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点.本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些问题的,揭示其中所折射出的设计思想与设计理念. MVC回顾   作为一种经典到不能再经典的架构模式,MVC的成功有其必然的道理,这个道理不同的人会有不同

.Net MVC的学习(一)

套种间作,也挺有意思的--近来学习感悟.DRP学习的同时,折腾了点以前不曾学习但是却很多次耳闻过的东西--Asp.Net中的MVC架构模式. 一.是什么? MVC,即(Model-View-Controller,模型-视图-控制器模式),和三层类似,用于表示一种软件架构模式.在这种模式下,将系统的实现分为模型Model,视图View,控制器Controlller.其中Model:对数据库的操作和一般的业务逻辑.View:负责做出和用户交互的显示:Controller:处理Request和Resp

浅谈MVC架构—你到底有什么本事

一.什么是MVC 1.概念 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 小编点睛:MVC就是类似三层的一种架构,主要还是采用封装(分层)的思想,来降低耦合