当我用macOS的时候自己在用什么葡京赌场网址

当我用macOS时,我收获的便是中看的UI以及高速地成功所需事项带来的愉悦感,以及着力不需操心系统问题的安全感[\[1\]](https://www.jianshu.com/p/c8526e0b56ac#fn1)

1   概述

葡京赌场网址 1

在翻阅本篇博文时,提议结合上篇博文:详解ASP.NET MVC
路由
  一起读书,效果兴许会更好些。  

图源:How to Prepare Your Mac for macOS Sierra

Controller(控制器)在ASP.NET
MVC中担负控制所有客户端与服务端的相互,并且负责协调Model与View之间数据传递,是ASP.NET
MVC框架要旨。Controller为ASP.NET
MVC框架的基本组成部分,其首要性承担处理浏览器请求,并控制响应什么内容给浏览器,但并不担负控制内容应咋样体现(View的职责)。

2017.01.24 v1.0 小说完成
2017.02.03 v1.1 参预“附:2.无限方便地修改文件名与路径”
2017.03.06 v1.2 更新“BetterTouchTool”的一部分,参与新职能介绍

随笔内容包括:Controller概述、Controller序列和章程、Controller运行过程、Controller方法系列、ViewData\ViewBag\TempData分析、ActionResult解说、Controller定义和参考文献,剩下有关Controller其他内容在本篇作品中不讲,如Controller激活机制(Controller类型解析、Controller类型缓存、Controller的释放和对话状态作为控制等)、ControllerFactory、ControllerBuilder等,除此之外,文中有些过分涉及到底层的情节,考虑篇幅等要素,只是简短提及了一晃,并未做深远剖析,依照前期境况,会掂量考虑是否再写一篇彻底深刻的最底层Controller的。

写在面前

  1. 自家既不是设计师也不是程序员,我的劳作环境是Windows,生活中行使Mac的光景紧假设上学、上网,偶尔写多少个代码脚本、写篇小著作,这构成了自身的应用逻辑

  2. 付费软件/服务是苹果生态圈的一大特征,至少之于我,是在苹果生态中收受了(在购买力范围内)使用正版软件的价值观,其中缘由有成千上万:iOS中国区的App普遍价格在1、6、18元[\[2\]](https://www.jianshu.com/p/c8526e0b56ac#fn2),华为越狱难度大且不安全,国家反盗版力度大、破解软件糟糕找到,macos的无数软件本身就从未有过破解版等,用正版方便省事。但是随着全社会的消费劲提高,其实无论哪个平台的用户都起来有了正版意识,如知乎里的琢磨:你哪些时候起首有了付钱正版的意识?。所以我在全文的推介中会有过多付费软件的存在,而读者将会意识,为进步生活工作质料而付出的那点资本是很是值得的

2   Controller系列和章程

目录

简书不像CSDN可以转移目录,而本文又太长,因此这里放一个简单易行的一流目录,方便读者在浏览器通过页面搜索间接进去相关大旨。

  1. 系统自带工具
  2. 系统级自动化工具
  3. 晋级系统效能的软件
  4. 附:我的有些体系应用体验分享

Controller本身就是一个类(Class),该类型有成千上万方法(Method),这一个措施中只假设通晓格局(public
method)就会被视为是一个动作(Action)或动作方法(Action
Method),只要动作存在,就足以因而该动作方法接收客户端传来的要求与控制响应的查验(View)

系统自带工具

  1. TimeMachine
    用来降低首要文件丢失带来的资产和保管文档历史版本的生气。对于后者举例:我形成了一套代码的编制,后来我想对它举行试验性的修改,结果自己越改越烂而且最初还忘记了备份,这时就可以接纳这项效能回到某个版本去(即使不自然能纯粹地重回所有修改前的不胜版本)。关于它的牵线参见《提姆(Tim)e
    Machine 使用教程(一):设置 提姆(Tim)e Machine 备份你的
    Mac
    》,它的一系列著作还教师了更进阶的功效。它在容量丰裕的情事下会保留过去24钟头的每刻钟备份、过去一个月的每一天备份、和过去享有月的每一周备份。

    用来文书的提姆(Tim)emachine效率

用于文档的TimeMachine功能


\#1.30
update:我今天突然发现,TM把去年的备份全部删掉了。。。看来TM号称自己能“保留过去所有月的备份”仅限当前年吧。。。。
  1. Spotlight
    虽说iOS上的Spotlight饱受诟病,甚至在某一代成为拖累系统速度的罪魁祸首,可是macOS上的这个成效实在是太强大了,导致自己再也不想回Windows了。
    它在摸索文件时,还能搜寻文档中的文字(这应当是Alfred(Alfred)做不到的),即你的Word、Pages、文本化PDF、网页书签历史记录等里带有“XXXX”,你在里面搜索“XXXX”也能把它们搜出来。

    Spotlight搜索文档内容

Spotlight能做的事,经《[OS X Yosemite 全新的 Spotlight 能做的 8
件事](https://link.jianshu.com?t=http://sspai.com/27347)》作者总结为:启动应用、计算、单位换算、建立对话、文档预览、搜索地理位置、搜索系统设置、搜索iTunes。
  1. 空格键预览
    以此效果应该多多用户都知情。在Finder(文件管理器)中,选中某个文件敲空格,就会对这一个文件举办预览,无论是PDF,office文档、视频、图片等。
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace MVCControllerDemo.Controllers
 8 {
 9     public class ControllerDemoController : Controller
10     {
11         //
12         // GET: /ControllerDemo/
13 
14         [HttpGet]
15         public ActionResult Index()
16         {
17             return View();
18         }
19     }
20 }

系统级自动化工具

** Automator**

图源:How to build Mac OS X services with Automator and shell scripting

  1. 将某网址自动变成markdown格式。在支撑markdown格式的网站上答题或者写作品的时候,通常需要引用某网页,这时就需要神速将该网址转成markdown的格式,例如为[用Automator实现网页标题自动存为Markdown文字超链接格式](http://www.jianshu.com/p/40d9b0961317)
  2. 出产移动硬盘。当电脑放在桌上使用时,我会接移动硬盘,当自身要拔硬盘时,总所周知需要先退出读取移动硬盘上文件的程序,然后“推出”,推出时还要采用推出的分区。因而我用Automator写了个程序,点一下就能不负众望“退出iTunes、视频播放器、网盘同步使用-推出拥有分区”这多少个手续。

    推出移动硬盘的小程序

  3. 拔电源时候关掉鸡肋App(其实这多少个差不多时候是伪需求)。当电脑成为电池供电时,需要退出一些不是及时要打开的软件以减低系统负荷而节省电量,比如杀毒软件(是的自我真用杀毒软件…免费的,只是图个心安)、网盘、照片、RSS管理器等,可是这着实是伪需求,因为关掉的软件很多时候是自我过几分钟又要开辟的,而且这种不分我处于的情景把软件一概关掉的做法实际上是有点粗暴。未来准备尝试借助可以调用系统API的Hammerspoon来开展更精准的操作。

从如上代码可以总计出Controller应持有如下几个主旨标准:

擢升系统效能的软件

  1. BetterTouchTool
    触摸板成效增强,提供45天的试用,授权码需要花最少(它有N个套餐,选哪档支付凭自己)6新币购入。这是很早的一个触摸板增强软件,可是好像现在过气了,我在各个提升Mac效用类的作品里都不便见到它的身形。
    我利用它的触摸板增强效用很少,可是却是异常核心的:关闭窗口,即点左上角的红叉,我的装置是多少个手指头——食、中、无名指按下去。

    BetterTouchTool界面

此外从截图上可以看到,首先它可以自定义操作的设备有Magic
Mouse鼠标、Trackpads触摸板、Keyboard键盘、Drawings数位板等甚至新MacBook
Pro的TouchBar;其次它可以针对全局或者单个App设置手势;最后,针对触摸板,它支持的手势包括从1到5甚至更多根手指,以及支持MBP触摸板上的Force功能。  
另外还有个特别有意思的功能,可以把在菜单栏中的一些按钮呈现在鼠标光标附近<sup>[\[3\]](https://www.jianshu.com/p/c8526e0b56ac#fn3)</sup>。效果如下图所示,本来要通过点击菜单栏才能出现的内容,出现在了鼠标边上,而通过的方式则是利用“快捷键替换”。  

![](http://oiht6on69.bkt.clouddn.com/%E5%BD%93%E6%88%91%E7%94%A8mac%E6%97%B6%E5%80%99%E6%88%91%E5%9C%A8%E7%94%A8%E4%BB%80%E4%B9%88/BTT%E8%8F%9C%E5%8D%95%E6%A0%8F%E6%95%88%E6%9E%9C.png)
BTT菜单栏效果


下图所示为在BetterTouchTool中的设置。选择该手势只在Safari中生效,然后绑定为几个键位的组合,例如“显示历史记录“为**Command+Y**,则在*Custom
Keyboard
Shortcut*中按下这个组合件,然后在*Note*中打上”显示历史记录“,如法炮制几次,就会有上图的效果了。  

![](http://oiht6on69.bkt.clouddn.com/%E5%BD%93%E6%88%91%E7%94%A8mac%E6%97%B6%E5%80%99%E6%88%91%E5%9C%A8%E7%94%A8%E4%BB%80%E4%B9%88/BTT%E8%8F%9C%E5%8D%95%E6%A0%8F%E8%AE%BE%E7%BD%AE.png)
BTT菜单栏设置


对它的更多介绍,参见《[Mac 触摸板增强神器:BetterTouchTool
上手指南](https://link.jianshu.com?t=http://sspai.com/27094)》、以及《[Mac
触摸板增强神器:BetterTouchTool
进阶指南](https://link.jianshu.com?t=http://sspai.com/27105/)》。  
此外,它还有个被人忽视的功能是窗口功能增强。在Windows上,有所谓的“**窗口贴边**”功能:当我们把一个窗口往屏幕顶端拖拽时,该窗口会最大化;往左右拖时,窗口会自动变为左边一半或者右边一半。Mac原生是没有的,通过它可以实现,它的这个功能我好像从来没见有人提过。
  1. ** Paste**
    剪贴板增强神器,颜值巨高。Mac
    AppStore链接
    官网提供7天试用。AppStore里68
    RMB,经常30 RMB,冰点时12 RMB。

    Slogan

该软件默默记录你在电脑上复制的任何东西——文件、图片、文本,同时以不同背景表明出处,同时可以建立多个Snippet组,把会循环复用的文本分门别类固定,还可在软件内搜索,找到剪贴板内容。  

界面截图


附一篇《[你其实需要一款 Mac
剪贴板工具,而且就是这个:Paste](https://link.jianshu.com?t=http://sspai.com/31570)》种草文。
  1. ** Ghost**
    快快记录文字的类便签应用,于官网选购9.99
    USD。它与每个应用与公事涉及,你在浏览照片时记下下的文字内容和写文档时记下的情节是分离存放的,甚至在浏览网页A和网页B时都可以分别记录文字。《Mac
    笔记应用 Ghostnote
    独家限时让利
    》对它的施用意况描述得十分之好:

    • 设计稿、文稿管理:哪个地方没做完?啥地方还索要修改?前几天来不做的话,就先在
      Ghostnote 里记一笔吧,前日一打开文件,登时就能想起起来;
    • 网页速记:在某个网站上观察科学的始末?在看精通课视频想边看边做速记?顺手就记下在
      Ghostnote 里吧;
    • 常用连忙键记录:在 Terminal 或 iTerm
      里平常有一对发令行口令或者是不常用的,想不起来咋办?不如放在
      Ghostnote 里吗,记不起来的时候扫一眼;
    • 代码复用:往往在 xCode
      中会有一些代码在不同的模块里复用,专门找个粘贴板管理软件?还不用直白用
      Ghostnote 更便民。

    关于页

  2. Yonik
    用来临时存放一些文件的,售价45
    RMB。官网上有免费的试用。比如您想发送网页上的一张图给爱人,是不是会先保存然后把公文拖到聊天工具窗口再发送,可是现在你能够一向拖动这张图纸至桌面边缘的Yonik的窗口中,再打开聊天的窗口,将文件从Yonik中拖出即可。详细的介绍可参见《OS
    X 上最临时的「临时文件夹」:Yoink
    文件暂存
    》和《9
    个 Yoink 实用技巧,提高你的 Mac
    文件处理效能

    Yoink介绍

  3. MacID
    这是一个使用Samsung的TouchID来解锁Mac或者电动锁定Mac的神器,iOS端售价25
    RMB,冰点6
    RMB,有过频繁限免,Mac端免费。主题效用:

    • 当华为通过此App连接上电脑后,电脑从锁屏唤醒,便会在三哥大上弹出通告,用TouchID输入指纹便可给电脑解锁。
    • 手机离开电脑一定距离,电脑会自动黑屏并锁上。
    • 解锁电脑还足以因此另一种方法——在触摸板敲击,次数和手指数均可自定义,例如我定义的就是……我才不会讲。
    • 当电脑处于安装软件等气象跳出输入管理员密码的窗口时,MacID也可同等起效果。
    • 在HTC端App可以手动给电脑锁屏,还可间歇或接续iTunes的播放。
    • Mac端可以发送剪贴板内容给手机。

    MacID官网

关于它的文章有《[优雅解锁 Mac 的
MacID](https://link.jianshu.com?t=http://sspai.com/32055)》。同时它还有更强大的功能是,可在Mac睡眠、唤醒、锁屏、解锁时运行AppleScript,例如锁屏后暂停iTunes播放,教程参见《[技巧:通过
MacID,让 Mac
在锁屏或解锁时自动执行某操作](https://link.jianshu.com?t=http://sspai.com/32828)》。
  1. PopClip
    一个所有极强扩充能力的小工具,只需选中一段文本,可进展操作包括搜索、打开链接、查字典、翻译、插手各样台式机App、添加日历、添加待办事项等等等等。售价68
    RMB,六月优化30 RMB,有过冰点价12
    RMB。它的插件扩大页面在这里,还可活动成立。《没那么简单:PopClip
    for
    Mac
    》对它有一个介绍。

    超过100种扩展

  2. aText
    一个极致适合懒人与讨厌重复工作的人的工具,4.99
    USD,官网(被墙,然则不推荐在AppStore买)有测试版下载。它的意义就是把一长段文字变成一个自定义的缩写,当输入这一个缩写,将电动替换成那一长段文字。例如我恨透了天天输邮箱地址,于是给xxxx@sina.com设置成sina,,给xxxx@outlook.com设置成out,等,甚至把一些大段文字设置成多少个假名,甚至连大段文字的格式也得以先行设置好,大大减轻了自身的承受。

    其一AppStore上架真是太不走心了

《[技巧:Mac
里的文字输入效率](https://link.jianshu.com?t=http://sspai.com/31525)》的中间讲到如何利用aText提高效率,不过我没太细研究,否则研究所花的成本就要超过节约时间带来的收益了。
  1. **
    iPic**
    每每写博客的人会欣赏,超方便地上传图片至图床。订阅制,38
    RMB/年。《iPic,急迅便利的图床工具》做了详尽的评测。可是我发觉还有一款U图床似乎可以覆盖它的法力且免费,到底这么些U图床效果怎么着,就待读者去体会了。

  2. Aflred
    在圈内已经是神一般的留存了,最基础的是摸索文件、网络和总结器功效,而它神在可以透过定制脚本实现一多元自动化操作,不过那就需要购置PowerPack了,单授权版19
    EUD,终生升级版35
    EUD,我或者将来有闲钱了再说吧,而且到底是不是非买不可,我还要延续收集音讯评估。

    黑帽子已成经典

它的种草文有:《[OS X 效率启动器 Alfred
详解与使用技巧](https://link.jianshu.com?t=http://sspai.com/27900/)》《[从零开始学习
Alfred:基础功能及设置](https://link.jianshu.com?t=http://sspai.com/32979)》《[OS
X 效率启动器 Alfred 的 5
个实用扩展推荐(一)](https://link.jianshu.com?t=http://sspai.com/27854/)》《[OS
X 效率启动器 Alfred 的 5
个实用扩展推荐(二)](https://link.jianshu.com?t=http://sspai.com/27929/)》《[5
款提高文件处理效率的 Alfred
扩展](https://link.jianshu.com?t=http://sspai.com/32680)》《[它已不仅仅是一款
Mac 效率启动器:Alfred 3.0
新版详解](https://link.jianshu.com?t=http://sspai.com/34468)》《[使用
Alfred 提高你的工作效率 | Matrix
精选](https://link.jianshu.com?t=http://sspai.com/35927)》等。
  1. Lacona
    到头来有个免费(使用扩充插件有延期,需29.99 USD)
    软件了,他号称是文字版的Siri,效率上与Alfred有些许重叠,这也是本人着想是否购买艾尔弗雷德(Fred)(Alfred)(Alfred)的要素之一。
    它像siri一样选择自然语义来给电脑发出命令,如一般的search...for...open...,这一个中厉害的在于可以同时用几个搜索引擎搜一样东西,可以同时开辟多少个软件;还有用schedule...at...来创制日历,remind me to...at...开创指示事项,更改系统安装、发邮件,以及任何奇奇怪怪的扩充效率。

    Lacona主页

Lacona设置页面


这里也有一篇介绍文章:《[文字版 Siri?「说人话」的 OS X
启动器:Lacona](https://link.jianshu.com?t=http://sspai.com/33117)》。

(1)Controller必须为公开类别;

附:我的有的序列拔取体验分享

  1. 触摸板手势设置。

    触摸板设置

我在设置触摸板的时候,摈弃了“查询”和“通知中心”的功能,前者可以通过PopClip有更多的功能,后者我根本用不到。  
第一页:两个设置是很重要的,一个是拿两只手指当做右键,还有一个是点一下触摸板相当于费劲按一下。  
第二页:都是两指的功能。第一个很重要,如果不开,滚动方向和手指方向是反的。  
第三页:我用两个指头来实现【例如浏览器的前进后退】功能,四个指头来进行多桌面的切换。**三指用来拖动文件**(这个用触摸板按住文件再拖方便多了)和借助BetterTouchTool实现的关闭窗口。三指的设置如图:  

三指的设置


Launchpad和显示桌面的手势,设置里说用拇指和其他三个手指,实际上我使用时用除了拇指外的四个手指更方便(仅仅是我觉得)。
  1. 极致方便地修改文件名与途径
    macOS与Windows最大的区别是,它可以在文件打开的气象下重命名与转移路线!(大概这是BSD的益处)。

    葡京赌场网址 2
    修改文件名与路径

如图,直接改就好了。我已经厌倦了Windows的文件关掉,改名字/改路径,再打开的过程。
  1. 开办四个桌面。
    按照不同的运用情状,设立不同的桌面,能在一定水平上有效性压缩烦扰,提升功效。

    多桌面设置

我会在桌面1摆学习A内容的窗口,在桌面2摆学习编程和写代码的窗口,桌面3摆听歌看剧用的窗口、桌面4摆写作时的窗口。这种做法降低了效率,却**提高了注意力**。  
也许有人说,在不做某项事情的时候,把关于它的窗口都关了不就行了,何必搞多个桌面。但是我对Mac的要求是,**一个在稳定的情景下从来不关机以及从来不关掉未完成内容的可持续运作平台**,我希望我今天没完成的内容,在第3天或者更久之后有时间来着手的时候,立刻就出现在我眼前。
  1. 关机/重启时的再一次打开窗口。
    上文提到的要求就让我对macOS的那些效能赞誉有加。

    双重起动

顾名思义,当你重新打开系统后,之前打开的软件窗口会重新自动都打开,几乎<sup>[\[4\]](https://www.jianshu.com/p/c8526e0b56ac#fn4)</sup>可以还原成关机前的样子。
  1. 急忙选用要开辟的公文。
    当你进来了一个文书夹,里面有N个文件,怎么样在你知道文书名的前多少个假名的景色下,找到某个英文文件名的文书。在Windows里,直接敲a就可以调到以a开首的公文这去,但是一旦这样的文件或者有几百个,而你的文本名是叫ay…xxx(我当然可以av…这样举事例的),这如何做?在macOS上,这您就敲ay就可以了,能记得多少长度就敲多少长度,能够大幅缩小范围。

写到这里就要告一段落了,感谢读到这里的读者,将来如若还有新的感受,我会继续创新……或者新开一篇。

* 此文用时07h06m写就,时长总括via timetrack.io


本文允许社交媒体自由转载,但需阐明出处及作者;商业用途及自媒体转载请联系自己


  1. 我2015年二月份购买了MacBook
    Air以来,从来没有重装过系统,升级也是以直接设置升级包的款型而不是崭新升级。而且macOS上也未尝某数字、某熊掌和某企鹅的一家子桶软件。

  2. http://news.52pk.com/cyyw/20141120/6241566.shtml

  3. 此灵感来自于
    http://www.jianshu.com/p/c90ec61e4c4e

  4. 抑或有早晚可能有些软件和窗口不可以打开,所以自己直接是应用合盖休眠而不是关机

(2)Controller名称必须以Controller结尾;

(3)必须连续自ASP.NET
MVC内建的Controller连串,或促成IController自定义类别;

(4)所以动作方法必须为公开形式,任何非公开的点子如宣称为private或protected的点子都不会被视为一个动作方法;

3  Controller的运作过程

当Controller被MvcHandler选中之后,下一步就是透过ActionInvoker选定合适的Action来运作。在Controllr中的每个Action可以定义0到五个参数,ActionInvoker会遵照当下的RouteValue与客户端传来的数码准备好可传唱Action参数的数额,最终正式调用Controller中被入选的不行Action方法。参数传入的特性都是通过一种叫做模型绑定(Model
Binding)机制,从RequestContext取得数据,并将数据对应或传播方法的参数中,让Action不用再像从前ASP或ASP.NET
Web
Forms中日常使用的Request.Fomr或Request.QueryString等对象来获得客户端的数额,通过自定义的模子绑定,甚至能够让你对应除去Request.Form或Request.QueryString以外的多寡出自,例如:HTTP
Cookies、HTTP Headers等等。

Action运行完后的回传值通常是ActionResult连串或其衍生序列(Derived
Class),事实上,ActionResult是一个抽象类,如ViewResult用来回传一个View、RedirectResult用来将网页重定向、Content回传文字内容、FileResult回传二进制文档等,那个均是继承ActionResult。MvcHandler从Controller得到ActionResult之后,就会最先运行ActionResult提供的ExecuteResult方法,并将运行结果响应到客户端,那时Controller的任务就是完成。

如上为Controller的为主运作过程。Controller在运转时还有一层所谓的动作过滤器机制,分为如下四种为主项目:

(1)授权过滤器(Authorization
Filters);

(2)动作过滤器(Action Filters);

(3)结果过滤器(Result Filters);

(4)例外过滤器(Exception Fiters);

4  控制器方法连串

4.1 动作方法选定器

 当通过ActionInvoker选定Controller内的公然格局时,ASP.NET
MVC还有另一个特征称为”动作方法选定器(Action Method
Selector)”,该选定器可以套用在动作方法上,以便ActionInvoker”选定”适当的Action。

 (1)NonAction属性

若控制器某个方法特性为NonAction,即便该Action方法是“公开方法”,也会告知ActionInvoker不要选定这么些Action来运作。重要用途:a.体贴Controller中的特定公开方法毫无发布到Web上;b.效能尚未支付形成就要举行安排,暂时不想将此方法删除。

1 [NonAction]
2  public ActionResult  Index()
3   {
4        return View();
5   }

也可将public改为private,达到维护的效果。

1 private ActionResult  Index()
2  {
3        return View();
4   }

(2)HTTP动词限定属性

 HttpGet、HttpPost、HttpDelete、HttpPut、HttpHead、HttpOptions、HttpPatch属性(Attributes)都是动作方法选定器的一部分。如下例子讲解HttpGet属性,即意味着唯有当客户端浏览器发送HTTP
GET要求时,ActionInvoker才会选定到那些Action:

1 [HttpGet]
2  public ActionResult  Index()
3  {
4       return View();
5  }

若将[HttpGet]改为[HttpPost],浏览器将找不到资源。

1 [HttPost]
2 public ActionResult  Index()
3 {
4        return View();
5 }

葡京赌场网址 3

 注释:如若动作方法上一向不嵌套任何限制属性,那么客户端浏览器发送任意HTTP动词都会自行选定到相应的Action。

 当需要出示接收窗体信息时,可以创造五个同名的Action,分别用[HttpGet](展现窗体HTML)和[HttpPost](接收窗体输出的值)属性来界定。

 1        [HttpGet]
 2         public ActionResult  Index()
 3         {
 4              return View();
 5         }
 6 
 7         [HttpGet]
 8         public ActionResult Create()
 9         {
10             return View();
11         }
12 
13 
14         [HttpPost]
15         public ActionResult Create(FormCollection fc)
16         {
17             //UpdateToDB(fc);
18             return RedirectToAction("Index");
19         }

4.2 操作过滤器

一个操作方法一旦被入选就会登时执行,并且只要它回到一个结出,再次来到的结果也会跟着履行,ASP.NET
MVC 5提供五种方法,分别列于如下:

  • 即身份验证
  • 授权
  • 操作前后处理
  • 结果前后处理
  • 错误处理。

除外,还有此外一种过滤器,即重写过滤器,它同意为大局或控制器的默认集合制定例外处境。

操作过滤器可以用作直接接纳于操作方法或控制器类的特性来编排,或当作在大局过滤器列表中注册的独立类来编排。如若打算将编制的操作过滤器作为特色来使用,那么它必须继续自FilterAttribute或它的其余子类,如ActionFilterAttribute。不作为特性应用的大局操作过滤器没有对这几个基类的要求。无论采用哪个路由,操作过滤器援助的过滤活动都由实现的接口决定。

5  Controller动作结果

5.1
控制器动作结果类型(ActionResult)  

日常,在概念一个方法时,大家常规性地依照章程是否有重临值归结为有重返值和无重临值两大类,控制器的华山真面目是类,控制器的action本质是方法,假使遵照数学集合来定义,那么控制器是类的一个子集,同理,控制器action是艺术的一个子集,由此,在探讨控制器以及控制器action时,我们是可以才用研商类和艺术的形似思维的。

控制器动作(具体的action)再次回到的结果叫做控制器动作结果,动作结果是控制器重回给浏览器请求的始末。ASP.NET
MVC框架辅助六种标准项目标动作结果。

 (1)继承ActionResult的动作结果

 葡京赌场网址 4

(2)继承关系

葡京赌场网址 5

 (3)例子

eg1:ViewResult

葡京赌场网址 6葡京赌场网址 7

 1 //方法1: ViewResult作为返回类型
 2 public ViewResult Index()
 3         {
 4             return View();
 5         }
 6 
 7 
 8 
 9  //方法二: ViewResultBase作为返回类型
10 public ViewResultBase Index()
11         {
12             return View();
13         }
14 
15 //方法三: ActionResult作为返回类型
16 public ActionResult Index()
17         {
18             return View();
19         }

View
Code

eg2:EmptyResult

葡京赌场网址 8葡京赌场网址 9

1   // GET: /ControllerDemo/
2         public EmptyResult  Index()
3         {
4             return null;
5         }

View
Code

eg3:ContentResult

葡京赌场网址 10葡京赌场网址 11

 1 //方法1:ContentResult作为返回类型
 2 public ContentResult Index()
 3         {
 4              return Content("Hello World");
 5         }
 6 
 7 
 8 //方法2:ActionResult作为返回类型
 9 public ActionResult Index()
10         {
11             return Content("Hello World");
12         }

View
Code

 eg4:JsonResult

葡京赌场网址 12葡京赌场网址 13

 1 public JsonResult jsonResult()
 2  2         {
 3  3            TechInfoCompanay jsonCompany=new TechInfoCompanay(){id="S001",CompanyName="信息科技有限公司"};
 4  5             return Json(jsonCompany,JsonRequestBehavior.AllowGet);
 5  6          }
 6  7 
 7  8 
 8  9  //定义一个公司类
 9 10     public class TechInfoCompanay
10 11     {
11 12         public string id { set; get; }
12 13         public string CompanyName { set; get; }
13 14     }

View
Code

eg5:RedirectResult

葡京赌场网址 14葡京赌场网址 15

 1 //方法1:RedirectResult作返回类型
 2 public RedirectResult redirectResult()
 3         {
 4             return Redirect("https://www.google.com.hk/");//具体的URL
 5         }
 6 
 7 //方法1: ActionResult作返回类型
 8 public  ActionResult redirectResult()
 9         {
10             return Redirect("https://www.google.com.hk/");//具体的URL
11         }

View
Code

eg6:RedirectToRouteResult

葡京赌场网址 16葡京赌场网址 17

1  public ActionResult redirectResult()
2         {
3             return Redirect("https://www.google.com.hk/");//具体的URL
4         }
5 
6         public RedirectToRouteResult redirectToRouteResult()
7         {
8             return RedirectToAction("Index");
9         }

View
Code

5.2相似方法

(1)如下只是给出方法样式,不做具体代码。

 1 //无返回类型
 2 public  void  functionName(形参)
 3 {
 4      //to add your content
 5 }
 6 
 7 //有返回类型
 8 public  返回类型  functionName(形参)
 9 {
10      //to add your content
11     return   与方法返回类型相匹配的结果;
12 }

(2)例子

eg:举个自定义重回string的不二法门

RouteConfig.cs

葡京赌场网址 18葡京赌场网址 19

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using System.Web.Routing;
 7 
 8 namespace MVCControllerDemo
 9 {
10     public class RouteConfig
11     {
12         public static void RegisterRoutes(RouteCollection routes)
13         {
14             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
15 
16             routes.MapRoute(
17                 name: "Default",
18                 url: "{controller}/{action}/{id}",
19                 defaults: new { Controller = "ControllerDemo", action = "Index", id = UrlParameter.Optional }
20             );
21         }
22     }
23 }

View
Code

ControllerDemoController.action

葡京赌场网址 20葡京赌场网址 21

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace MVCControllerDemo.Controllers
 8 {
 9     public class ControllerDemoController : Controller
10     {
11 
12         public string GeneralFunction()
13         {
14             return "自定义一般方法";
15         }
16     }
17 }

View
Code

测试结果

葡京赌场网址 22

6  ViewBag、ViewData和TempData概述

6.1
三者在MVC框架里的概念

在MVC框架中,System.Web.Mvc命名空间下的ControllerBase中,对ViewBag、ViewData和TempData多少个特性的定义如下

ViewBag

葡京赌场网址 23葡京赌场网址 24

 1  [Dynamic]
 2         public object ViewBag
 3         {
 4             [return: Dynamic]
 5             get
 6             {
 7                 Func<ViewDataDictionary> viewDataThunk = null;
 8                 if (this._dynamicViewDataDictionary == null)
 9                 {
10                     if (viewDataThunk == null)
11                     {
12                         viewDataThunk = () => this.ViewData;
13                     }
14                     this._dynamicViewDataDictionary = new DynamicViewDataDictionary(viewDataThunk);
15                 }
16                 return this._dynamicViewDataDictionary;
17             }
18         }

View
Code

ViewData

葡京赌场网址 25葡京赌场网址 26

 1 public ViewDataDictionary ViewData
 2         {
 3             get
 4             {
 5                 if (this._viewDataDictionary == null)
 6                 {
 7                     this._viewDataDictionary = new ViewDataDictionary();
 8                 }
 9                 return this._viewDataDictionary;
10             }
11             set
12             {
13                 this._viewDataDictionary = value;
14             }
15         }

View
Code

TempData

葡京赌场网址 27葡京赌场网址 28

 1 public TempDataDictionary TempData
 2         {
 3             get
 4             {
 5                 if ((this.ControllerContext != null) && this.ControllerContext.IsChildAction)
 6                 {
 7                     return this.ControllerContext.ParentActionViewContext.TempData;
 8                 }
 9                 if (this._tempDataDictionary == null)
10                 {
11                     this._tempDataDictionary = new TempDataDictionary();
12                 }
13                 return this._tempDataDictionary;
14             }
15             set
16             {
17                 this._tempDataDictionary = value;
18             }
19         }

View
Code

6.2 三者相比较

(1)ViewData和TempData属性均再次来到一个所有字典结构的多少容器,即字典类型的key/Value对,ViewBag为Dynamic类型。

三者方法签名为:

1  public TempDataDictionary TempData { get; set; }
2  public ViewDataDictionary ViewData { get; set; }
3  public object ViewBag { [return: Dynamic] get; }

(2)TempData存储临时数据,并且安装的变量在被第五遍读取后会被移除,即TempData设置的变量只可以被读取三次。(why?)

(3)ViewBag和ViewData属性是一模一样份数据的不同表现情势,二者的不同之处在于前者是一个动态指标,可以为其指定任意属性(动态属性名将作为数据字典的Key)。

(4)三者均是容器,即能储存常量,变量,也能积存集合。

7  ActionResult解说

 在ASP.NET MVC框架中,对ActionResult定义如下:

 1 // Generated by .NET Reflector from C:\Users\WJM\documents\visual studio 2013\Projects\DEMOMVC\packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\System.Web.Mvc.dll
 2 namespace System.Web.Mvc
 3 {
 4     using System;
 5     
 6     public abstract class ActionResult
 7     {
 8         protected ActionResult()
 9         {
10         }
11         
12         public abstract void ExecuteResult(ControllerContext context);
13     }
14 }

 ActionResult是Action运行后的回传型别,但是当Action回传ActionResult的时候,其实并不分包那些ActionResult(例如ViewResult)的运转结果,而是包含运行那些ActionResult时所需的多少,当MvcHandler从Controller取得ActionResult之后才会去运转出ActionResult的结果。在ActionResult抽象类中只是定义了一个ExecuteResult()方法。

ASP.NET 定义了以下几种衍生型别。

葡京赌场网址 29

8  控制器定义

一般地,在定义Controller时,采纳二种模式,即落实IController和继续Controller。

8.1 实现IController

RouteConfig.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using System.Web.Routing;
 7 
 8 namespace MVCControllerDemo
 9 {
10     public class RouteConfig
11     {
12         public static void RegisterRoutes(RouteCollection routes)
13         {
14             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
15 
16             routes.MapRoute(
17                 name: "Default",
18                 url: "{controller}/{action}/{id}",
19                 defaults: new { Controller = "ControllerDemo", action = "Index", id = UrlParameter.Optional }
20             );
21         }
22     }
23 }

RouteDemoController

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 using System.Reflection;
 8 namespace MVCControllerDemo.Controllers
 9 {
10     public class ControllerDemoController : IController
11     {
12         public String Index()
13         {
14             return "<h1>Index</h1>";
15         }
16 
17 
18 
19         public void Execute(System.Web.Routing.RequestContext requestContext)
20         {
21             string action = requestContext.RouteData.Values["action"].ToString();
22             Type typ = typeof(ControllerDemoController);
23             MethodInfo md = typ.GetMethod(action, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
24             if (md == null)
25             {
26                 requestContext.HttpContext.Response.Write("<h1>404</h1>");
27             }
28             else
29             {
30                 string s = md.Invoke(this, null).ToString();
31                 requestContext.HttpContext.Response.Write(s);
32             }
33         }
34     }
35 }

8.2 继承Controller

这种艺术相比较常用。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace MVCControllerDemo.Controllers
 8 {
 9     public class ControllerDemoController : Controller
10     {
11         //
12         // GET: /ControllerDemo/
13 
14         [HttpGet]
15         public ActionResult Index()
16         {
17             return View();
18         }
19     }
20 }

 

9  参考文献

【01】http://www.cnblogs.com/wangiqngpei557/p/3390812.html

【02】http://www.cnblogs.com/yaozhenfa/p/asp\_net\_mvc\_controller.html

【03】http://www.360doc.com/content/12/0611/15/29831\_217456312.shtml

【04】http://blog.csdn.net/yw1688/article/details/51280665

【05】Professional Asp.net MVC 5

【06】Professional Asp.net MVC 4

【07】The framework of revelation  of 
Professional Asp.net MVC 5

【08】 https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/aspnet-mvc-controllers-overview-cs

10  版权

 

  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同提升。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少一些作品利用读书、参考、引用、抄袭、复制和粘贴等多种措施结合而成的,大部分为原创。
  • 如你喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2016177728@qq.com。
  • 能够转载该博客,但必须出名博客来源。

相关文章