Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ASP.NET MVC 5 - 控制器

ASP.NET MVC 5 - 控制器

作者头像
葡萄城控件
发布于 2018-01-10 09:18:09
发布于 2018-01-10 09:18:09
2.8K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

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

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

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.Web; 
using System.Web.Mvc; 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
        // 
        // GET: /HelloWorld/Welcome/  
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void RegisterRoutes(RouteCollection routes)

{

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(

        name: "Default",

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

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

);

}

如果您运行应用程序并没有提供任何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] 部分。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public string Welcome(string name, int numTimes = 1) { 

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

安全注意事项: 上面的代码使用了 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映射到您方法中的参数。

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public string Welcome(string name, int ID = 1) 

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void RegisterRoutes(RouteCollection routes) 

{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute( 
        name: "Default", 
        url: "{controller}/{action}/{id}", 
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class RouteConfig{ 
   public static void RegisterRoutes(RouteCollection routes) 
   { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.MapRoute( 
          name: "Default", 
          url: "{controller}/{action}/{id}", 
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
      routes.MapRoute( 
           name: "Hello", 
           url: "{controller}/{action}/{name}/{id}" 
       ); 
   } 
}

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

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

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

控制器是MVC中的重要组成部分,有了本节知识的学习,相信大家会更加深入地理解MVC。那么在MVC开发过程中,除了以上知识之外,还可以借助哪些工具呢?ComponentOne Studio ASP.NET MVC 是一款针对 MVC 平台的控件包,它与 Visual Studio 无缝集成,完全与 MVC6 和 ASP.NET 5.0 兼容,将大幅提高工作效率。

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

《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版

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-11-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.NET MVC编程——路由
框架自动生成的路由配置 上图中,路由配置文件为App_Start文件夹下的RouteConfig.cs。 代码如下: public class RouteConfig { public
甜橙很酸
2018/03/30
1.8K0
ASp.NET MVC 路由「建议收藏」
ASP.NET MVC Route—转发请求: 1.客户端发起请求 2.到达IIS 3.转发到程序集 4.经过一个路由匹配–转发到匹配的控制器中 5.匹配的action去处理
全栈程序员站长
2022/09/15
5360
MVC项目开发中那些用到的知识点(Asp.Net Mvc3.0 Areas)
   我们知道MVC项目各部分职责比较清晰,相比较ASP.NET Webform而言,MVC项目的业务逻辑和页面展现较好地分离开来,这样的做法有许多优点,比如可测试,易扩展等等。但是在实际的开发中,随着项目规模的不断扩大,Controller控制器也随之不断增多。如果在Controllers文件夹下面有超过两位数controller,即便采用良好的命名规范,或者用子文件夹的形式区分不同功能的控制器,还是会影响项目的可阅读性和可维护性。因此,在一些场景下,如果能把与某功能相关的文件分离到一个独立的项目中是非常有用的。Asp.Net MVC提供了Areas(区域)的概念达到这一目的。
aehyok
2018/09/11
7880
MVC项目开发中那些用到的知识点(Asp.Net Mvc3.0 Areas)
Asp.Net MVC2.0 Url 路由入门---实例篇
     本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术。
老马
2022/05/10
4350
ASP.NET MVC5高级编程 ——(5)路由
这章呢,我们开始讲ASP.NET MVC5中的路由机制,在这之前,先提一下URL(Uniform Resource Locator)-- 统一资源定位符。需要注意的是,这里的“资源”这个词,是一个抽象的概念,既可以指一个文件,也可以指一个方法、一个类或是一段代码。由此我们引出了路由的主要用途:
浩Coding
2019/07/03
2.2K0
ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
  在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor。在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎。
Edison Zhou
2018/08/20
1.9K0
ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
Asp.Net MVC2.0 Url 路由入门
   本篇文章是初识Asp.Net MVC2.0 的后续的介绍。此文将从Routing未开放源代码开始,还会对Asp.Net的Url重写技术做个简单介绍。并简单介绍Asp.Net MVC2.0 Url路由技术的使用。
老马
2022/05/10
9290
ASP.NET Web API路由规则(二)
(注:至于为什么用MapHttpRoute而不是MapRoute;为什么用routeTemplate而不是用url我们再以后的章节介绍)
liulun
2022/05/09
5200
ASP.NET Web API路由规则(二)
Asp.net mvc 知多少(二)
本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。 由于个人技术水平和英文水平也是有限的,因此错误在所难免,希
圣杰
2018/01/11
2.2K0
Asp.net mvc 知多少(二)
MVC框架介绍
2.(App_Start):包含mvc系统启动的相关类, RouteConfig:路由配置, FilterConfig:过滤器配置
wfaceboss
2019/04/08
1K0
MVC框架介绍
ASP.NET MVC默认配置如有跳转到指定的Area区域中的对应程序中
  今天在搭建一个基于MVC的项目,因为项目涉及到了手机和pc端,为了方便和减少二者之间的耦合我在区域(Areas)中建立了两个 程序空间,那么问题来了我想让程序默认跳转到我所指定的areas中的对应项目怎么做呢?其实理解了路由配置的原理这点其实并不是很难,请看我的代码:
追逐时光者
2022/02/15
5210
ASP.NET MVC默认配置如有跳转到指定的Area区域中的对应程序中
Attribute Routing With ASP.net MVC 5
Routing 是 ASP.net MVC 将地址映射为 Action 方法的技术。
beginor
2020/08/10
6480
Attribute Routing With ASP.net MVC 5
MVC项目开发中那些用到的知识点(MvcContrib分离ASP.NET MVC项目)
在http://www.cnblogs.com/aehyok/archive/2013/04/07/3006438.html这篇随笔中,我简单的介绍了,asp.net mvc3.0中自带的Areas的使用。本次主要进行扩展,来讲一下,在开发后期项目中用的MvcContrib来对项目进行分离,比如最简单的分离Web项目,前台和后台。
aehyok
2018/09/11
6350
MVC项目开发中那些用到的知识点(MvcContrib分离ASP.NET MVC项目)
如何在 ASP.NET MVC 中集成 AngularJS(1)
介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术。例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务。另外,还有最新的数据库技术、最新的设计模式和技术。 当选择最新的软件技术时,有几个因素在起作用,其中包括如何将这些技术整合起来。过去两年中,我最喜欢的一项技术就是设计单页面应用(SPA)的 AngularJS。作为一个微软stack开发者,我也是使用 ASP.NET MVC 平台实现 MVC 设计模式和并进行研究的粉丝,包括它的捆绑和压缩功能
葡萄城控件
2018/01/10
8.1K0
如何在 ASP.NET MVC 中集成 AngularJS(1)
ASP.NET MVC 中宿主WCF Rest 服务的解决方法
我这里就是通过routes.MapRoute(参数)中的参数进行处理的。MapRoute的重载如下:
aehyok
2018/09/11
3570
[译]Asp.net MVC 之 Contorllers(二)
URL路由模块 取代URL重写 路由请求 URL路由模块的内部结构 应用程序路由 URL模式和路由 定义应用程序路由 处理路由 路由处理程序 处理物理文件请求 防止路由定义的URL 属性路由  书接上回[译]Asp.net MVC 之 Contorllers(一) URL 路由HTTP模块通过获取 URL,然后调用合适的执行方法处理进来的请求。URL 路由 HTTP 模块取代了旧版本 ASP.NET 的 URL 重写功能。URL 重写的核心包括获取请求、解析原始 URL 以及指导 HTTP 运行时环境服务于
数据分析
2018/03/01
2K0
[译]Asp.net MVC 之 Contorllers(二)
找到多个与名为“Home”的控制器匹配的类型的解决方案
 主地址:http://localhost:3412/Home/Index 区域地址:http://localhost:3412/T200/Home/Index 解决方法: 注册路由添加命名空间(na
纯粹是糖
2018/03/14
1.5K0
找到多个与名为“Home”的控制器匹配的类型的解决方案
七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL
本节又带了一些常用的,却很难理解的问题,本节从文件上传功能的实现引出了线程使用,介绍了线程饥饿的解决方法,异常处理方法,了解RouteTable自定义路径 。 系列文章 七天学会ASP.NET MVC
葡萄城控件
2018/01/10
4.1K0
七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL
ASP.NET MVC5+EF6+EasyUI 后台管理系统(30)-本地化(多语言)
我们的系统有时要扩展到其他国家,或者地区,需要更多的语言环境,微软提供了一些解决方案,原始我们是用js来控制的,现在不需要了。 我们只要创建简单的资源文件,通过MVC的路由设置就可以轻松的进行语言中的
用户1149182
2018/01/16
1.5K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(30)-本地化(多语言)
asp.net mvc项目自定义区域
2.Code:在Global.asax中添加注册区域-->AreaRegistration.RegisterAllAreas();
易墨
2018/09/14
1.2K0
asp.net mvc项目自定义区域
推荐阅读
相关推荐
ASP.NET MVC编程——路由
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验