当前位置: 首页 > 编程日记 > 正文

一起谈.NET技术,专访微软MVP衣明志:走进ASP.NET MVC 2框架开发

日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭凡专门采访了微软MVP衣明志老师。ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET WEB应用程序的一个框架。

  MVP专访人物介绍

衣明志,蝉联五届微软MVP,烟台.NET俱乐部主席,现主要从事.NET平台下的Web应用开发、解决方案、构架设计及技术培训等工作。

衣明志

照片居中者为衣明志老师

  1.与之前的ASP.NET技术相比,MVC框架给您哪些新的开发体验?ASP.NET MVC框架都能在哪些方面提高Web开发的效率?

衣明志老师:其实ASP.NET MVC也是ASP.NET技术,并不能把它从ASP.NET中剥离出来。MVC是个将一个应用的实现分成三个组件角色的框架技术:模型,视图和控制器。而ASP.NET MVC是基于ASP.NET技术的MVC实现,所以基础层面的东西几乎是一样的。

ASP.NET MVC促进了清晰的关注分离,具备高度的可测试性、可扩展性和可插拔性。ASP.NET MVC包含了强大的URL映射组件和HTML Helper类,可以使用很干净的URL和前端页面代码来创建WEB应用。

MVC的关注分离特点,使得团队协作开发变的更加协调,减少了大量不必要的麻烦。ASP.NET MVC相对于ASP.NET WebForm 前端代码(HTML、JS、CSS等)可控制力方面有了很大加强,使得我们在做互联网应用尤其是web2.0应用时变的更加得心应手。结合Visual Studio 2008/2010的支持,我们可以简单的生成常用的创建,修改、详细信息、列表等页面和相应的Controller,很大程度上提高了开发Web应用尤其是互联网Web应用的体验和效率。

  2.ASP.NET MVC框架的第一版发布已经有些时间,在您的使用过程中,感觉有哪些需要改进的地方?最近发布的MVC 2 RC版,是否改进了这些问题?

ASP.NET MVC 1很早就发布了,得到较广泛的应用和不少好评。但作为第一个版本的MVC框架,在很多方面是需要改进的。 例如说,缺乏对业务对象的数据验证支持、不支持应用分区(如,后台管理我们一般放在admin目录里)等。

在前端时间发布的ASP.NET MVC 2 RC版中,我们很惊喜地发现上述问题基本都有了对应的解决。新版本MVC已经开始支持 服务器端和客户端数据验证、Areas等特性。

  3.ASP.NET MVC 2 RC版的发布给我们带来了许多新功能特性,您最感兴趣的是其中的那几项?我们看到ASP.NET MVC 2中有了强类型的HTML辅助方法的支持,这样的改进对于开发人员意味着什么?

ASP.NET MVC 2 RC的发布确实给我们带来了许多新特性,主要包含如下这些:

◆新的强类型HTML辅助方法

◆服务器和客户端数据验证支持

◆自定义模板的UI辅助方法

◆支持对应用分区(Areas)
  ◆支持异步的Controller

◆使用Html.RenderAction把一个Action渲染在页面的局部

◆大量新的辅助方法、API等

◆改进了Visual Studio的支持

说实话我个人对新特性都很感兴趣,而相对来说对数据验证、Areas、异步Controller和部分新的辅助方法更感兴趣一些。
新增的强类型HTML Helper,是很不错的东西。比如我们可以使用:

1. <%= Html.TextBoxFor(model=>model.Title) %>

代替之前的:

1. <%= Html.TextBoxFor(Title,Model.Title) %>

这两个方法其实最终渲染出来的HTML是完全相同的,但是新的强类型辅助方法却使得我们可以在编译时就发现视图缺陷而不必等到运行时,毕竟运行时检查错误可能会不够彻底。对于使用ASP.NET MVC 2的开发人员来说,应该尽可能使用强类型的辅助方法,以提高应用质量。

  4.ASP.NET MVC 2可以运行在VS 2008和VS 2010上,您推荐的是哪个版本?VS 2010在哪些方面能更好的支持ASP.NET MVC 2的开发?

ASP.NET MVC 2 RC目前对Visual Studio 2010还不直接支持,所以目前还只能在VS2008下做正常的开发。支持VS2010的ASP.NET MVC 应该很快会有新的发布出来,大家可以专注一下。VS2010给开发人员提供了大量新的特性和功能,例如:改进的智能提示 (尤其是对JavaScript的智能提示)、对.Net 4的先天支持等。VS2010的这些新特性会很大程度上提高开发体验,所以对有条件的开发人员来说,我推荐使用VS2010来做ASP.NET MVC 2的web开发,当然这还得再等几天。

  5.对于数据验证,是ASP.NET MVC框架中永恒的话题。您是怎么看ASP.NET MVC 2中对于数据验证方面的改进的?

ASP.NET MVC 2 RC在数据验证方面做了很不错的增强,可以直接使用System.ComponentModel.DataAnnotations 下的RequiredAttribute、RangeAttribute等特殊的Attribute来设置验证规则,非常方便。而且这个验证规则还是穿透服务器端和客户端的,这很大程度上满足了对数据验证的基本需求。如果客户端能够直接支持jquery的验证库,而不是必须使用Microsoft的验证库就更好了,呵呵

  6.大家一直对ASP.NET MVC中的T4支持还不太理解,这样一个文本模板转换工具箱对于WEB开发人员究竟有何益处?

嗯,你的问题很好。T4,即the Text Templating Transformation Toolkit(文本模板转换工具箱),是一种高度定制化的基于模板的文本生成器。而ASP.NET MVC对Visual Studio的增强支持方面就包含了T4的使用,这被很多开发人员忽略了。其实T4的使用在ASP.NET MVC的使用中是蛮重要的,比如我们使用Visual Studio做ASP.NET MVC开发时,需要向View目录添加View(视图)文件。

添加View的界面上允许用户选择创建强类型视图,这时可以看到View content的下拉列表中,会有默认的Create、Details、Edit、Empty、List 等5个选项,选定一个后点击Add按钮时,Visual Studio可以根据选择的View data class的信息,自动生成相应的View页面,很方便。而 View content的下拉列表项其实都是预订好的T4模板文件的名称而已,生成View文件的过程其实是T4的执行过程,这些View 的T4模板文件存储在Visual Studio安装目录下的一个特殊文件夹里。Controller文件的生成其实也是如此。

为什么我让大家在ASP.NET MVC 2里重视一下这个问题呢?其实细心的人,可以已经发现了MVC2里的默认View的模板内容有所变化了。比如说ASP.NET MVC 1.0时Create的默认视图中每个属性的模板样式类似下面这样:

1. <p>
2.
<label for="Title"> Title:label>
3.
<%= Html.TextBox("Title ") %>
4.
<%= Html.ValidationMessage("Title ", "*") %>
5. p>

而在ASP.NET MVC 2里变成如下样式了:

1. <div class="editor-label">
2. <%= Html.LabelFor(model => model.Title) %>
3. div>
4. <div class="editor-field">
5. <%= Html.TextBoxFor(model => model.Title) %>
6. <%= Html.ValidationMessageFor(model => model.Title) %>
7. div>

这两个视图代码出来的结果显然是不太一样的,假如你项目原来用的是ASP.NET MVC 1.0,现在要升级成ASP.NET MVC 2的,那么新添加的视图就跟原来的样子有所不同了,如果你对原来的视图还有运行了一些相应的js,那么可能你就会开始郁闷了,怎么办?就是在项目中使用旧模板来生成原来的视图文件。

当然在默认的View模板不能满足你的项目需求时,你也可以利用T4模板创建新的View模板,并在Visual Studio中得以体现。具体的使用方法我稍后会写一篇专门的博客跟大家分享这部分的内容。

  7.在ASP.NET MVC 2中对于Area功能的增强,这样的增强是如何在同一个项目中更好地组织应用程序的?

ASP.NET MVC 1.0时,如果我们要在一个项目中做自己网站的后台应用,而又保持URL的整洁性,是很困难的,那需要你自己做很多工作来,通过自有的方式实现Area的功能,效果可能还不那么好,因为默认情况下Controller是不区分命名空间的。例如:前台可能有这样的地址:http://testhost/News/List,而你希望在后台的News管理列表的Url是:http://testhost/admin/News/List,这几乎是不可能完成的任务,让我们非常困扰。

ASP.NET MVC 2添加了Areas的支持,解决上述问题我们就可以添加一个Area,名字叫做admin,这时项目中就有了一个Areas文件夹,里面是admin文件夹,admin里面包含了Controllers、Models、Views三个目录和一个名叫的AreaRegistration.cs文件,然后我们在Global.asa.cs文件中的routes.MapRoute前加一行AreaRegistration.RegisterAllAreas();就搞定了。这样不同区域的应用在不同Area目录里进行独立的组织管理,相当不错。

  8.您认为目前WEB企业级开发最大的障碍在哪一方面?如何运用ASP.NET MVC框架来减轻程序员在这一障碍上的压力?

51CTO曾经对我做过一次视频采访,那次我谈到过这个这方面的一些内容,但是由于标题和部分表述的原因,可能被一些程序员误解了我的意思。其实就像ASP.NET MVC 2相对于ASP.NET MVC 1.0来说,做了这么多的改进,改进的目标是什么呢?很大程度上就是减少不必要的劳动量和潜在风险,提高生产力,让开发人员的精力更多放到业务处理方面(我提到的业务均不是市场人员所说的业务)。所以Web的企业级开发往往最大的障碍是开发人员把太多精力浪费在了非业务核心的方面,比如说数据验证、UI代码的编写和一些繁琐但没什么技术含量的工作方面。

新版的ASP.NET MVC的很多新特性都减轻了开发人员不少的工作压力,比如说Html.EditForModel方法,可以直接在View中生成很不错的编辑界面,而且有自动识别能力:bool型的属性,对应的自动生成CheckBox;枚举类型自动生成下拉列表等等。而Controller、Action、Filter等都给我们带来很多类似的自动机制,减少了很多繁琐无味的工作,使我们可以把更多精力放到核心工作方面去。

  ASP.NET MVC延伸阅读

ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架。

它由Castle的MonoRail而来.目前已经历经数个版本。ASP.NET MVC中的MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

MVC结构图

MVC模式图

ASP.NET MVC框架是既ASP.NET WebForms后的又一种开发方式。它提供了一系列优秀特性,使ASP.NET开发人员拥有了另一个选择。ASP.NET MVC框架选项非常干净,而且容易使用。它将允许你在应用中轻易地保持关注分离,且有助于进行干净的测试和TDD。

相关文章:

Entity Framework:Code-First Tutorial开篇

这个系列文章是关于Entity Framework Code-First的英文系列文章&#xff0c;内容不错&#xff0c;每篇一个主题知识点介绍&#xff0c;特转载过来 原文地址&#xff1a;http://www.entityframeworktutorial.net/code-first/entity-framework-code-first.aspx转载于:https://www…

Android开发者指南(22) —— Accessing Resources

前言   本章内容为Android开发者指南的Framework Topics/Application Resources/Accessing Resources章节&#xff0c;译为"资源调用"&#xff0c;版本为Android 3.2 r1&#xff0c;翻译来自&#xff1a;"CodeGuy"&#xff0c;欢迎访问他的博客&#xff…

如何快速实现HTML编辑器.NET组件

作者&#xff1a;未知 请作者速与本人联系得到“素材”首先我们需要得到一个HTML编辑器的原始代码&#xff0c;网上有不少这类的编辑器&#xff0c;如大名鼎鼎的RichTextBox&#xff0c;为了避免版权纠纷&#xff0c;以我所做得为例&#xff08;暂名&#xff1a;UltraTextBox…

罗永浩力荐,丁磊豪送的学习神器:手机查词真不如这支AI词典笔?

销量确实称得上火爆。尽管999元的直播优惠价价格并不低&#xff0c;但这支有道词典笔专业版在快手直播间还是经历了返场&#xff0c;最终20000多台一抢而空。 为这款产品站台的正是网易CEO丁磊&#xff0c;6月11日是他网上卖货的首秀&#xff0c;不过更重要的是&#xff0c;那天…

Thinking in java中关于Exception的一道面试题.

今天看到Thinking in Java中一个关于Exception的例子:最后看到有一篇总结的比较好的文章, 这里拿来记录下, 文章地址是:http://blog.csdn.net/salerzhang/article/details/46581457 感谢原作者. 1 class Annoyance extends Exception {}2 class Sneeze extends Annoyance {}3 …

使用 .NET 框架轻松开发完美的 Web 窗体控件

作者&#xff1a;David S. Platt 出自&#xff1a;微软 本文假定您熟悉 Visual Basic .NET、C# 和 HTML 下载本文的代码&#xff1a; WebC.exe (274KB) 摘要 预建的自定义控件可以简化和加快应用程序的设计&#xff0c;并使您能够维护 UI 的一致性。但是&#xff0c;预先打…

史上最强女游戏程序员

也许你听说过John Carmack 和Tim Sweeney等大牛的名字&#xff0c;而向来游戏工业都是阳盛阴衰&#xff0c;适逢国际妇女节&#xff0c;今天我为大家介绍游戏业界一位史上最强女游戏程序员&#xff1a;Corrinne Yu。 简历 以下是她在游戏业界内的简历 微软Halo团队首席引擎架构…

重磅日程公布!与百名大咖在线交流技术,2天20个AI论坛不可错过

当全球都在面向 AI 变革时&#xff0c;AI 不再是触不可及&#xff0c;它需要产业化落地&#xff0c;为社会创造价值。在这一轮技术革命、技术浪潮中&#xff0c;开发者们成为构建任何一家AI企业的核心竞争力。不过&#xff0c;不同于此前只懂开发语言、数据结构便可轻松躲过新技…

Python取出列表相应值的位置(表处理)

#需求在一个列表中&#xff0c;取出相应值的位置方法1&#xff1a;#脚本示例[rootlocalhost opt]# cat list.py #!/usr/bin/env python #_*_ coding:utf-8 _*_ name[!,#,*,Eric,wsyht,jack,jack,a,b,c,d,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,2332,4,2,6,2] first_pos 0 for …

rhel5.5安装xwindow

rhel5.5安装xwindow 1安装xwindow yum groupinstall "X Window System" 2、安装GNOME桌面环境 yum groupinstall "GNOME Desktop Environment" 3、卸载GNOME桌面环境 yum groupremove "GNOME Desktop Environment"转载于:https://blog.51cto…

使用 ASP.NET 加密口令

作者&#xff1a;未知 请作者速与本人联系当我们在网站上建立数据库时&#xff0c;保护用户的信息安全是非常必要的。多数用户不愿意让别人知道自己的信息&#xff0c;同时网管也不想因为安全问题而丢失网站的信誉。无论对于谁&#xff0c;安全问题都是非常重要的。为了解决这…

算法鼻祖高德纳,82 岁仍在写《计算机程序设计的艺术》

作者 | 年素清编辑 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;高德纳&#xff08;Donald Ervin Knuth&#xff09;被誉为现代计算机科学的鼻祖&#xff0c;毕生致力于编译程序、属性文法和运算法则等领域的前沿研究&#xff0c;共出版专著17部&#x…

centos查看特定程序占用端口情况

ps axu |grep 程序名&#xff0c;找到特定程序的pidnetstat -nltp |grep pid即可。转载于:https://blog.51cto.com/zhukeqiang/1811735

关于页面刷新的问题

在做.net开发时&#xff0c;经常能碰到这样的情况&#xff0c;页面很长&#xff0c;而我们一般用的都是服务器端控件&#xff0c;用服务器端控件有这样一个缺点&#xff0c;就是控件每次都要和服务器交互&#xff0c;而产生页面的刷新&#xff0c;试想一下&#xff0c;如果页面…

技术直播:程序员副业的修炼指南!(限免报名)

面试造飞机&#xff0c;上班拧螺丝&#xff0c;每天想辞职&#xff0c;但无奈副业还“大器晚成”的样子&#xff01;那可能是你还没有选对副业&#xff01;滴滴 ~福利卡&#xff01;&#xff01;&#xff01;CSDN学院邀请汤小洋老师开设技术直播课《程序员副业之路-三大终极秘籍…

Linux 双网卡绑定测试

Linux 双网卡绑定测试 先介绍一下情况&#xff0c;服务器A和服务器B都是CentOS 4.6的系统&#xff0c;现在要做HA Cluster&#xff0c;为了避免裂脑的发生&#xff0c;要提高心跳链路的可靠性&#xff0c;下图是现时的连接情况&#xff0c;服务器A的eth2、eth3分别和服务器B的e…

第六章练习题和知识面扩充

作业题&#xff1a;1. 自动获取IP地址的命令是什么&#xff1f;您知道在什么情况下&#xff0c;您的Linux才可以自动获取IP地址&#xff1f;2. 远程连接Linux服务器&#xff0c;需要Linux服务器开启sshd服务&#xff0c;那么sshd服务默认监听哪个端口&#xff1f;这个端口是否可…

一文详解面向多级多模态场景的召回引擎

作者| 阿里文娱开发专家 崇懿、阿里文娱开发专家慧善责编 | 屠敏头图 | CSDN 下载自视觉中国出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;优酷视频搜索在文本搜索系统的基础上&#xff0c;不断探索视频搜索的方案&#xff0c;在多模态输入、多级多模态索引、跨模…

对比.Net PetShop和Duwamish来探讨Ado.Net的数据库编程模式

作者:卢彦.NET PetShop和Duwamish简单介绍相信大家一定听说过有名的"宠物店大战"&#xff0c;没错&#xff0c;本文的主角之一就是获胜方.NET PetShop&#xff0c;微软号称以27倍的速度和1/4的代码量遥遥领先于基于J2EE的PetStore宠物商店。虽然SUN也曾对此抱怨过不满…

如何直接将HTML代码加载到TWebBrowser

wbRecvContent//为 webbrowser控件 procedure TFrmMain.ShowHtmlCentent(slt: TStrings); var aMemory: TMemoryStream; pbuf: PAnsiChar; begin aMemory : TMemoryStream.Create(); try aMemory.Clear; slt.SaveToStream(aMemory); aMemory.Seek(0, soBeginning); wbRecvConte…

JavaScript基础(一) 数据类型

动态类型 JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型&#xff0c;在程序运行过程中&#xff0c;类型会被自动确定。 数据类型 最新的 ECMAScript 标准定义了 7 种数据类型: 6 种 原始类型: BooleanNullUndefinedNumberStringSymbol (ECMAScript…

DataGrid入门经典(C#)

作者&#xff1a;未知 请作者速与本人联系这篇文章主要介绍如何在DataGrid控件中实现编辑、删除、分类以及分页操作。为了实现我们的意图&#xff0c;我们使用SqlServer2000自带的NorthWind数据库。程序分为两部分&#xff1a; 1.包含HTML代码的.ASPX文件 2.包含所有逻辑及…

(札记)Altera Stratix IV系列FPGA TRUE LVDS RX input termination 在Quartus工程中的设置方法...

Altera Stratix IV系列FPGA Row bank的TRUE LVDS_RX支持oct&#xff08;on chip termination),所以设计的时候不需要外接一个100ohm电阻。备注&#xff1a;我使用的是友晶科技&#xff08;Terasic&#xff09;的DE4。 所以当我们使用到Stratix iv系列FPGA的row bank的lvds的时候…

直播:AI时代,普通程序员该如何转人工智能(限免报名)

常常有小伙伴在后台反馈&#xff1a;想了解人工智能&#xff0c;但是该怎么学&#xff1f;自学难度大又没有效果&#xff0c;该怎么办&#xff1f;CSDN为了解决这个难题&#xff0c;联合唐宇迪老师为大家带来了一场精彩的直播【年薪百万AI工程师亲授&#xff1a;小白实战培养计…

沃通免费SSL证书申请指南

我们在做一些exchange或lync项目的时候很多时候都会用到公网证书&#xff0c;比如&#xff1a;我们做exchange2013和Office 365混合部署&#xff0c;或者通过SEM暂存迁移或CEM直接转换迁移的时候都需要用到公网证书,下面为大家介绍1个免费的SSL证书及申请的方法&#xff0c;希望…

使用VS.NET2003编写存储过程

作者&#xff1a;未知 请作者速与本人联系数据表定义了如何在数据库中存储数据&#xff0c;但没有说明如何存取数据。我们还需要了解读写记录以便从表中再次调用选定行和列的详细信息。开发人员通常会在其代码中编写一些特殊的查询语句&#xff0c;用于读写数据。这不仅会导致…

谈Linux的安全设置

如今系统的安全变的越来越重要了&#xff0c;这里我想把我平时比较常使用的一些linux下的基本的安全措施写出来和大家探讨一下&#xff0c;让我们的Linux系统变得可靠。 1、BIOS的安全设置 这是最基本的了&#xff0c;也是最简单的了。一定要给你的BIOS设置密码&#…

亮风台提出用完全可训练的图匹配方法,优于最新SOTA | CVPR 2020

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 6月14日-19日&#xff0c;CVPR 2020在线上举行&#xff0c;据了解&#xff0c;本届大会共收到6656篇投稿&#xff0c;接收论文1470篇&#xff0c;录用率约22%&#xff0c;低于ICCV 2019论文录用率&#xff08;25%&…

数组与纠结的排序篇

数组之纠结的排序 1.数组是什么&#xff1f; 数组&#xff1a;所谓数组&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;就是把有限个类型相同的变量用一个名字命名&#xff0c;然后用编号区分他们的变量的集合&#xff0c;这个名字称为数组名&#xff0c;…

ASP.NET结合COM组件发送Email

在开发电子邮件发送程序的时候&#xff0c;我们经常需要使用到相应的组件&#xff0c;其实不需要第三方的组件&#xff08;例如&#xff1a;Jmail&#xff09;照常可以做到发送Email的功能。 在系统目录&#xff08;如c:/winnt或c:/windows&#xff09;的system32子目录中可以找…