ASP.NET MVC 5

MVC代表: 模型_-视图-_控制器 。MVC是一个架构良好并且易于测试和易于维护的开发模式。基于MVC模式的应用程序包含:

· Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据类

· Views: 应用程序动态生成 HTML所使用的模板文件。

· Controllers: 处理浏览器的请求,取得数据模型,然后指定要响应浏览器请求的视图模板。

本系列教程,我们将覆盖所有这些概念,并告诉您如何在ASP.NET MVC 5中使用它们来构建应用程序。

首先,让我们创建一个控制器类。在解决方案资源管理器中,用鼠标右键单击控制器文件夹(Controllers ),然后选择“添加控制器“

clip_image002

在添加Scaffold对话框,单击MVC5****控制器 - ,然后单击“添加”。

clip_image004

命名新的控制器为“HelloWorldController”,并单击“ 添加“。

clip_image006

请注意,在解决方案资源管理器中会创建一个名为_HelloWorldController.cs_的新文件和一个新的文件夹_Views\HelloWorld_。该文件会被IDE默认打开。

clip_image008

用下面的代码替换该文件中的内容。

1using System.Web; 2using System.Web.Mvc; 3namespace MvcMovie.Controllers 4{ 5 public class HelloWorldController : Controller 6 { 7 // 8 // GET: /HelloWorld/ 9 public string Index() 10 { 11 return "This is my <b>default</b> action..."; 12 } 13 // 14 // GET: /HelloWorld/Welcome/ 15 public string Welcome() 16 { 17 return "This is the Welcome action method..."; 18 } 19 } 20}

在这个例子中控制器方法将返回一个字符串的HTML。本控制器被命名HelloWorldController代码中的第一种方法被命名为Index。让我们从浏览器中调用它。运行应用程序(按F5或CTRL + F5)。在浏览器的地址栏中输入路径“HelloWorld“。(例如,在下面的示例中: http://localhost:1234/HelloWorld)页面在浏览器中的表现如下面的截图。在上面的方法中,代码直接返回了一个字符串。你告诉系统只返回一些HTML,系统确实这样做了!

clip_image002[4]

ASP.NET MVC会调用不同的控制器类(和其内部不同的操作方法)这取决于传入URL。所使用的ASP.NET MVC的默认URL路由逻辑使用这样的格式来判定哪些代码以便调用:

/[Controller]/[ActionName]/[Parameters]

你也可在_App_Start/RouteConfig.cs_ 文件内通过配置URL路由解析规则:

1public static void RegisterRoutes(RouteCollection routes) 2 3{ 4 5 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 6 7 routes.MapRoute( 8 9 name: "Default", 10 11 url: "{controller}/{action}/{id}", 12 13 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 14 15); 16 17}

如果您运行应用程序并没有提供任何URL段的,默认为“Home”的控制器和“Index”的操作方法,在上面的代码中的defaults部分指定的:

  • 第一部分的URL确定哪个控制器类会被执行。因此 _/HelloWorld_映射到HelloWorldController控制器类。
  • 第二部分的URL确定要执行控制器类中的那个操作方法。因此 _/HelloWorld/Index,_会使得HelloWorldController控制器类的Index 方法被执行。请注意,我们只需要浏览 _/HelloWorld_路径,默认情况下会调用Index方法。如果没有明确的指定操作方法,Index方法会默认的被控制器类调用。
  • 第三部分的URL段(Parameters参数)是路由数据。在本教程中,稍后我们将看到路由数据。

浏览_http://localhost:xxxx/HelloWorld/Welcome。_Welcome方法会被运行并返回字符串:"This is the Welcome action method...”。 默认的MVC映射为/[Controller]/[ActionName]/[Parameters] 对于这个URL,控制器类是HelloWorld,操作方法是Welcome,您还没有使用过URL的[Parameters] 部分。

image

让我们稍微修改一下这个例子,以便可以使用URL传递一些参数信息给控制器类(例如, /HelloWorld/Welcome?name=Scott&numtimes=4)。改变您的Welcome 方法来包含两个参数,如下所示。需要注意的是,示例代码使用了C#语言的可选参数功能,numTimes参数在不传值时,默认值为1。

1public string Welcome(string name, int numTimes = 1) { 2 3 return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes); 4}

安全注意事项: 上面的代码使用了 HttpServerUtility.HtmlEncode 来保护应用从malacious输入的(也就是JavaScript).  有关详细信息,请参阅How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings.

运行您的应用程序并浏览此URL(_http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4__)_。你可以对参数name 和numtimes 尝试不同的值。 ASP.NET MVC model binding system 会自动将地址栏中URL里的 query string映射到您方法中的参数。

clip_image002[6]

上面的例子,没有用到URL段参数的部分( Parameters)。 通过query strings传递name 和 numTimes的参数.

用下面的代码替换“Welcome”的方法:

1public string Welcome(string name, int ID = 1) 2 3{ 4 return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID); 5}

运行应用程序并输入以下网址URL: http://localhost:xxx/HelloWorld/Welcome/3?name=Rick

clip_image002[5]

这次URL第三部分的参数匹配了参数ID。

通过查看下面的RegisterRoutes路由规则函数:

1public static void RegisterRoutes(RouteCollection routes) 2 3{ 4 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 5 routes.MapRoute( 6 name: "Default", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 9 ); 10}

在ASP.NET MVC应用程序,通过参数传递路由数据是为更典型的应用(如同上面用query string传递 ID参数)。您还可以增加一条路由来传递name 和numtimes ,在路由数据在URL中的参数。在_App_Start\RouteConfig.cs_ file文件中,添加“Hello”的的路由:

1public class RouteConfig{ 2 public static void RegisterRoutes(RouteCollection routes) 3 { 4 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 5 routes.MapRoute( 6 name: "Default", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 9 ); 10 routes.MapRoute( 11 name: "Hello", 12 url: "{controller}/{action}/{name}/{id}" 13 ); 14 } 15}

运用应用程序,在浏览器输入:/localhost:XXX/HelloWorld/Welcome/Scott/3.

clip_image002[7]

对于众多MVC应用程序的缺省默认的路由可以正常工作。稍后您将学习本教程中通过使用模型绑定的数据,你就不必修改缺省的路由。

在上面的例子中,控制器一直在做着MVC中“VC”部分的职能:也就是视图和控制器的工作。该控制器直接返回HTML内容。通常情况下,您不会让控制器直接返回HTML,因为这样代码会变得非常的繁琐。相反,我们通常会使用一个单独的视图模板文件来帮助生成返回的HTML。让我们来看看下面我们如何能做到这一点吧。

-----------------------------------------------------------------------------------------

《ASP.NET MVC 5 入门指南》12篇文章汇总如下:

1. ASP.NET MVC 5 - 开始MVC 5之旅

2. ASP.NET MVC 5 - 控制器

3. ASP.NET MVC 5 - 视图

4. ASP.NET MVC 5 - 将数据从控制器传递给视图

5. ASP.NET MVC 5 - 添加一个模型

6. ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

7. ASP.NET MVC 5 - 从控制器访问数据模型

8. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

9. ASP.NET MVC 5 - 给电影表和模型添加新字段

10. ASP.NET MVC 5 - 给数据模型添加校验器

11. ASP.NET MVC 5 - 查询Details和Delete方法

12. ASP.NET MVC 5 - 使用Wijmo MVC 5模板1分钟创建应用

希望这些文章对感兴趣的朋友有所帮助,另附上PDF版的汇总文档:

ASP.NET MVC 5 入门指南》PDF版

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

springMVC的简单了解和环境搭建

一,什么mvc模型视图控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计思想。它主要通过分离模型、视图及控制器在应用程序中的角色将业务逻辑从界面中解耦。通常,模型负责封装应用程序数据在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来自用户的请求,并调用后台服务(eservice 或者 dao)来