在写这篇文章之前,xxx已经写过了几篇关于改mvcframework主题的文章,想要了解的朋友可以去翻一下之前的文章

在asp.net mvc的架构里,controller用来响应用户的输入,同时协调view和model以及数据访问层。contorller也是一个类,包括的方法,这些方法是在routing framework处理一个请求的时候被调用的。

我们可以看一下,如果我们建立程序的时候,选择InerterTemplate为我们主动生成的HomeController的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace InternetEBuy.Controllers
{public class HomeController : Controller{public ActionResult Index(){ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";return View();}public ActionResult About(){ViewBag.Message = "Your app description page.";return View();}public ActionResult Contact(){ViewBag.Message = "Your contact page.";return View();}}
}

我们可以看一下对应的index.cshtml

@{ViewBag.Title = "Home Page";
}
@section featured {<section class="featured"><div class="content-wrapper"><hgroup class="title"><h1>@ViewBag.Title.</h1>     @*我们可以自己实验一下,是忽略大小写的!*@<h2>@ViewBag.message</h2></hgroup><p>To learn more about ASP.NET MVC visit<a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.The page features <mark>videos, tutorials, and samples</mark> to help you get the most from ASP.NET MVC.If you have any questions about ASP.NET MVC visit<a href="http://forums.asp.net/1146.aspx/1?MVC" title="ASP.NET MVC Forum">our forums</a>.</p></div></section>
}
<h3>We suggest the following:</h3>
<ol class="round"><li class="one"><h5>Getting Started</h5>ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites thatenables a clean separation of concerns and that gives you full control over markupfor enjoyable, agile development. ASP.NET MVC includes many features that enablefast, TDD-friendly development for creating sophisticated applications that usethe latest web standards.<a href="http://go.microsoft.com/fwlink/?LinkId=245151">Learn more…</a></li><li class="two"><h5>Add NuGet packages and jump-start your coding</h5>NuGet makes it easy to install and update free libraries and tools.<a href="http://go.microsoft.com/fwlink/?LinkId=245153">Learn more…</a></li><li class="three"><h5>Find Web Hosting</h5>You can easily find a web hosting company that offers the right mix of featuresand price for your applications.<a href="http://go.microsoft.com/fwlink/?LinkId=245157">Learn more…</a></li>
</ol>

这里想说的一点就是,我上面有注释的内容,

忽略大小写的。

controller动作

我们可以看到controller类和我们在asp.net看到的.cs类没有什么区别,实际上,承当主要任务的是里头的方法(在asp.net mvc里我们把它叫做动作),它们会在处理请求时被调用。

举个例子,比如,我们输入 /Home/Index, routing framework就会晓得用homecontroller中的index方法来处理这个请求,然后asp.net mvc framework就会生成一个homecontroller的实例,并执行对应的index方法。接下来,Index方法就会通过ViewBag属性来把传输数据,通过view()方法,告知asp.net mvc framework 显示View目录下名称为Index的view,然后返回的actionResult类型是viewResult类型的。

每日一道理
那蝴蝶花依然花开花落,而我心中的蝴蝶早已化作雄鹰飞向了广阔的蓝天。

ActionResutl

我们应当注意的是,controller是告知framework接下来做什么,而没有告知怎么做。关于怎么做,是最好每个action都包括的返回值来完成的。比如说,当一个controlller决议显示一个view的时候,它会通过返回一个viewresult来告知framework显示view。它本身不会渲染view,这种松耦合也是一个分离思惟的表现。

事实上,每一个action都应当返回一个actionresult,但是很少情况你需求手动地创立它们,只需求调用system.mvc.contorller父类提供的帮助方法,如下:

从上面的列表,我们可看到,framework提供了我们须要的大部情况的返回值,当然,如果没有提供,framework也提供给我们也可以自己手工创立的能力。

我们也可看到,返回的类型为actionresult,这里用到了多态。还要说明一点的是,如果返回的类型在actionresult里没有找到的话,那么framework会主动将它封装成一个contentResult,然后渲染生成的内容。

action parameter

事实上,action可以获得请求的信息,并通过asp.net mvc framework填充到指定的参数里,这就是asp.net mvc 里的功能强大的model binding。

在看model binding之前,我们还是先来看一下传统的方式。

public ActionResult Create(){var auction = new Models.Auction(){Title = Request["title"],CurrentPrice = decimal.Parse(Request["currentPrice"]),StartTime = DateTime.Parse(Request["startTime"]),EndTime = DateTime.Parse(Request["endTime"])};//return View();}

在这个create action里,要用一个请求传进来的值来实例化一个auction对象,因为auction的属性类型,有很多都不是字符串类型的,所以须要进行转换。从上面的代码,我们可以看到,这些代码其实是很“软弱的”,因为,只要其中的一个转换失败,那么这个action就会失败。当然,我们可以用tryParse方法来进行验证,但是,这就会增长很多代码,也不具有可读性。

所以也就发生的model Binding

基本的model Binding

我们还是直接看代码:

public ActionResult Create(string title, decimal currentPrice,DateTime startTime, DateTime endTime)
{var auction = new Auction() {Title = title,CurrentPrice = currentPrice,StartTime = startTime,EndTime = endTime,};// ...
}

当前的action直接把要接收的值写到了参数里,当asp.net mvc framework执行的时候,它会试图从请求里用雷同的值填充对应的参数,

这里,我们就想到了,这里参数名称的一致就就尤为重要了。

在里还要说明一点就是,framework不仅会查看请求对象里是否有对应的值,而且还会查看route data,query string parameter,post values,甚至是序列化的JSON对象。比如上面的代码是从一个连接字符串中获得:

绑定庞杂对象

上面我们将演示直接把我们获得的值绑定到Auction对象里:

public ActionResult Create(Auction auction)
{// ...
}

这样是不是更加简练了,我们同时也看到了model binding的强大之处。

action filters

action filter帮助我们很好的解决了交差访问(存眷)的问题,通过给controller action 添加ActionFilterAttribute,来控制action执行,上面是一个阻止匿名用户访问的aciton例子:

[Authorize]
public ActionResult Profile()
{// Retrieve profile information for current userreturn View();
}

asp.net mvc framework提供了相当多的filter来解决我们常见的一些问题,它的好处:简练、松耦合。

我们可以创立Action filters,通过继承 ActionFilterAttribute或者其它的asp.net mvc framework的action filter.(action filter可以很便利的给我们的网站添加用户自定义的逻辑)

文章结束给大家分享下程序员的一些笑话语录: 祝大家在以后的日子里. 男生象Oracle般健壮; 女生象win7般漂亮; 桃花运象IE中毒般频繁; 钱包如Gmail容量般壮大, 升职速度赶上微软打补丁 , 追女朋友像木马一样猖獗, 生活像重装电脑后一样幸福, 写程序敲代码和聊天一样有**。

--------------------------------- 原创文章 By
mvc和framework
---------------------------------

mvcframeworkProgramming ASP.NET MVC-Fundamentals of ASP.NET MVC(四)Controller相关推荐

  1. 《ASP.NET MVC企业实战》(二) MVC开发前奏

    2019独角兽企业重金招聘Python工程师标准>>> ​ 在上一篇"<ASP.NET MVC企业级实战>(一)MVC开发前奏"中记录了作者介绍的一些 ...

  2. MVC架构在Asp.net中的应用和实现

    MVC架构在Asp.net中的应用和实现 摘要:本文主要论述了MVC架构的原理.优缺点以及MVC所能为Web应用带来的好处.并以"成都市信息化资产管理系统"框架设计为例,详细介绍其 ...

  3. [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...

    本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Ac ...

  4. ASP.NET Core MVC 源码学习:MVC 启动流程详解

    前言 在 上一篇 文章中,我们学习了 ASP.NET Core MVC 的路由模块,那么在本篇文章中,主要是对 ASP.NET Core MVC 启动流程的一个学习. ASP.NET Core 是新一 ...

  5. ASP.NET MVC 整合 Spring.net(1)- Controller进容器

    我们都知道Asp.net MVC自有一套执行机制. 通过分析MVC的MvcHandler关键代码 ProcessRequest         protected internal virtual v ...

  6. asp.net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

  7. asp.net mvc 点滴 一 asp.net mvc vs asp.net web forms

    MVC模式是一个大家很熟悉的设计模式,微软的asp.net mvc framework是给asp.net web forms提供了一个可替换的asp.net方案. Models:Model对象是程序的 ...

  8. html里面的view怎么修改,asp.net mvc 3-在局部视图中修改MVC 3 ViewBag不会保留到_Layout.cshtml...

    asp.net mvc 3-在局部视图中修改MVC 3 ViewBag不会保留到_Layout.cshtml 我在Razor视图引擎中使用了MVC 3. 我想在局部视图的ViewBag中设置一些值,并 ...

  9. ASP.NET + MVC5 入门完整教程七 -—-- MVC基本工具(上)

    这里主要介绍三类工具之一的 依赖项注入(DI)容器,其他两类 单元测试框架和模仿工具以后介绍. 1.准备示例项目 从创建一个简单的示例开始,名称为"EssentialTools" ...

  10. ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点

    参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...

最新文章

  1. 1.Socket通信
  2. CSS之布局(盒子的垂直布局)
  3. 套上这个壳,手机自己“跑步”去充电
  4. 9 个 Java 性能调优技巧,YYDS!
  5. TP5 行为Behavior用法说明
  6. elasticsearch rest api操作
  7. C++:09---类静态成员、类常量成员
  8. Kudu :Service unavailable: Soft memory limit exceeded at xxx% of capacity
  9. drools 7.x 决策表使用
  10. PS网页设计教程XIV——如何创建一个复古风格的PS布局
  11. 《C程序设计新思维》一第6章 玩转指针6.1 自动、静态和手工内存
  12. 最小公倍数和最大公约数的简洁写法
  13. python内置函数每日一学 -- all()
  14. JavaScript 隐性类型转换步骤浅析
  15. ClearCase四大功能详述
  16. 蓝凌ekp开发_蓝凌EKP在eclipse中启动报错
  17. 处女作,,QT+arduino的物联网小项目
  18. 旅游行业APP开发方案
  19. this指向,并改变this指向
  20. Github实用Android开源项目推荐(三)

热门文章

  1. labVIEW学习笔记(三)簇,局部、全局变量
  2. 力扣-80 删除有序数组中的重复项 II
  3. react setState修改嵌套对象
  4. eclipse修改java编译的版本
  5. split,splice,slice,substr,substring使用方法总结
  6. 服务器性能低下时正确的处理方法
  7. 《深入浅出MFC》 第二版中文
  8. Douglas Peucker算法的C#实现
  9. 解决Myeclipse10 Building Workspace速度慢的问题
  10. FLEX自动完成组件.--AutoSuggest