<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>MVC Framework</title>
        <link>http://blog.entlib.com/EntLib/category/5.aspx</link>
        <description>MVC is a framework methodology that divides an application's implementation into three component roles: models, views, and controllers.</description>
        <language>zh-CN</language>
        <copyright>EntLib.com</copyright>
        <managingEditor>entlib@hotmail.com</managingEditor>
        <generator>EntLib.com Blog Version 3.0.0.0</generator>
        <item>
            <title>ASP.NET MVC 最佳实践向导（Best Practices ）</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/09/20/asp.net-mvc-best-practices.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;ASP.NET MVC &lt;/b&gt;&lt;b&gt;最佳实践向导（Best Practices &lt;/b&gt;&lt;b&gt;）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ASP.NET MVC 是微软官方提供的一个新的开发框架，下面有一些博客帖子介绍了使用ASP.NET MVC 框架开发Web Applications的推荐最佳实践。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a target="_blank" href="http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx"&gt;Part I&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a target="_blank" href="http://weblogs.asp.net/rashid/archive/2009/04/03/asp-net-mvc-best-practices-part-2.aspx"&gt;Part II&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;ASP.NET MVC &lt;/b&gt;&lt;b&gt;资源&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=476"&gt;&lt;span&gt;&lt;span&gt;中文&lt;/span&gt;Professional ASP.NET MVC 1.0 – Nerd Dinner &lt;span&gt;范例程序&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/ASPNETMVCSampleApplicationsOpenSourceExamplesTutorials"&gt;ASP.NET MVC Sample Applications - Open-Source Examples and Tutorials&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/ASPNETMVCScreencastsVideosWebcastsLearnASPNETMVCFramework"&gt;&lt;font color="#034af3"&gt;ASP.NET MVC Screencasts Videos and Webcasts - Learn ASP.NET MVC Framework&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/ASPNETMVCVideosScreencastsMIX09SessionsFreeTraining"&gt;&lt;font color="#034af3"&gt;ASP.NET MVC Videos and Screencasts from MIX 09 Sessions - Free Training&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/DownloadASPNETMVCSampleMovieDatabaseApplicationDevConnections"&gt;&lt;font color="#034af3"&gt;Download ASP.NET MVC Sample Movie Database Application from DevConnections&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/ASPNETMVCTrainingKitHandOnLabsSamplesTutorialsPresentations"&gt;ASP.NET MVC Training Kit - Hand-On Labs Samples Tutorials Presentations&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/214.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/09/20/asp.net-mvc-best-practices.aspx</guid>
            <pubDate>Sun, 20 Sep 2009 11:03:54 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/214.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/09/20/asp.net-mvc-best-practices.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/214.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Microsoft ASP.NET MVC Beta Released!</title>
            <link>http://blog.entlib.com/EntLib/archive/2008/10/17/microsoft-asp.net-mvc-beta-released.aspx</link>
            <description>&lt;div style="text-align: center"&gt;&lt;span style="font-size: small"&gt;&lt;strong&gt;Microsoft ASP.NET MVC Beta Released!&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;The ASP.NET MVC Beta release provides a new Model-View-Controller (MVC) framework on top of the existing ASP.NET 3.5 runtime.&lt;br /&gt;
&lt;br /&gt;
Some points about the release (Headings taken from the &lt;i&gt;What's New&lt;/i&gt; section):&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;MvcFutures.dll is not included in the beta (as it wouldn't be included in the final release)&lt;/li&gt;
    &lt;li&gt;The Beta installer installs the ASP.NET MVC assemblies (System.Web.Mvc.dll, System.Web.Routing.dll, and System.Web.Abstractions.dll) into the GAC.&lt;/li&gt;
    &lt;li&gt;New Simple Membership Features in the Default Project Template&lt;/li&gt;
    &lt;li&gt;New Filter Types for Authorization and Exception Handling&lt;/li&gt;
    &lt;li&gt;New Output Cache Filter&lt;/li&gt;
    &lt;li&gt;Changes for ASP.NET AJAX&lt;/li&gt;
    &lt;li&gt;Namespaces in Routes&lt;/li&gt;
    &lt;li&gt;New Interface for Enhanced Testability of TempData&lt;/li&gt;
    &lt;li&gt;ActionInvoker Extensibility Improvements&lt;/li&gt;
    &lt;li&gt;ViewDataDictionary (minor change)&lt;/li&gt;
    &lt;li&gt;ViewEngine Improvements&lt;/li&gt;
    &lt;li&gt;Helper Improvements&lt;/li&gt;
    &lt;li&gt;Controller and Filter Improvements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bug fixes:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Fixed a bug in which the ignore-routes setting (created by using the IgnoreRoute extension method) affected URL generation.&lt;/li&gt;
    &lt;li&gt;Fixed a view engine caching bug when the application is not in debug mode (that is, when debug="false" is set in the Web.config file). This bug occurred if different action methods in different controllers had the same name. In that case, an action method could render the view for the wrong controller.  &lt;/li&gt;
    &lt;li&gt;Fixed a bug in OutputCacheAttribute in which cached authenticated content did not require authentication. Even though the content is cached, if it requires authentication, the user should be required to authenticate first before seeing the cached content.&lt;/li&gt;
    &lt;li&gt;Fixed a bug in which RenderPartial does not work when tracing is turned on.&lt;/li&gt;
    &lt;li&gt;Fixed a bug in the Html.TextArea helper method in which an overload was not looking in ViewData for its value when the provided value is null.&lt;/li&gt;
    &lt;li&gt;Fixed the OutputCacheAttribute.CacheProfile property so that it works in Medium Trust.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
下载链接：&lt;br /&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a24d1e00-cd35-4f66-baa0-2362bdde0766&amp;amp;DisplayLang=en#Instructions"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=a24d1e00-cd35-4f66-baa0-2362bdde0766&amp;amp;DisplayLang=en#Instructions&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/41.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2008/10/17/microsoft-asp.net-mvc-beta-released.aspx</guid>
            <pubDate>Thu, 16 Oct 2008 16:27:18 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/41.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2008/10/17/microsoft-asp.net-mvc-beta-released.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/41.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Microsoft ASP.NET MVC Preview 5 及LINQ TO SQL最新版开发示例演示（提供源码下载）</title>
            <link>http://blog.entlib.com/EntLib/archive/2008/10/01/microsoft-asp.net-mvc-preview-5-linq-to-sql.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;Microsoft ASP.NET MVC Preview 5 &lt;/b&gt;&lt;b&gt;及LINQ TO SQL&lt;/b&gt;&lt;b&gt;最新版开发示例演示（提供源码下载）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本示例程序演示如何采用 Microsoft ASP.NET MVC Preview 5 和 LINQ TO SQL 开发 Web Application。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. ASP.NET MVC &lt;/b&gt;&lt;b&gt;简介&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;input type="image" height="136" width="247" src="http://forum.entlib.com/useruploadfiles/entlibforum/image/MVC/MVC1.jpg" align="left" longdesc="undefined" /&gt;ASP.NET MVC框架是既ASP.NET WebForms后的又一种开发方式。它提供了一系列优秀特性，使ASP.NET开发人员拥有了另一个选择。MVC是个将一个应用的实现分成三个组件角色的框架技术：模型，视图和控制器。&lt;/div&gt;
&lt;div&gt;在基于MVC的应用里，Model(模型)是负责保持状态的应用组件。这个状态通常都持久于数据库之中。&lt;/div&gt;
&lt;div&gt;在基于MVC的应用里，View(视图)是负责显示用户界面的组件。这个UI通常是使用模型Model数据来创建的。&lt;/div&gt;
&lt;div&gt;在基于MVC的应用里，Controller(控制器)是处理用户交互，操作模型Model和最终选择用哪个视图View来显示UI的组件。在MVC应用中，视图只是用来显示信息而已，是控制器来处理和回应用户的输入和交互的。&lt;/div&gt;
&lt;div&gt;使用MVC方法的一个好处是，它有助于促进应用中模型，视图，控制器间的关注的清晰分离。保持关注的清晰分离使得对应用的测试极其容易，因为不同应用组件间的契约的定义和表达是更明确的。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. MVC &lt;/b&gt;&lt;b&gt;和 LINQ TO SQL &lt;/b&gt;&lt;b&gt;演示程序&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;下面是EntLib.com 论坛小组（&lt;a href="http://forum.entlib.com/"&gt;&lt;font color="#800080"&gt;http://forum.EntLib.com&lt;/font&gt;&lt;/a&gt; ）针对 Microsoft ASP.NET MVC 框架最新版(Preview 5) 设计的一个简单示例程序。示例程序基于EntLib.com Forum 数据库演示，可以非常方便切换到其他数据库。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如下是示例程序的运行效果界面：&lt;/div&gt;
&lt;input type="image" height="391" width="770" src="http://forum.entlib.com/useruploadfiles/entlibforum/image/MVC/MVC_Forum_Demo_1.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;input type="image" height="412" width="679" src="http://forum.entlib.com/useruploadfiles/entlibforum/image/MVC/MVC_Forum_Demo_2.gif" /&gt;&lt;br /&gt;
&lt;input type="image" height="369" width="681" src="http://forum.entlib.com/useruploadfiles/entlibforum/image/MVC/MVC_Forum_Demo_3.gif" /&gt;&lt;br /&gt;
原文链接及示例项目源代码下载：&lt;br /&gt;
&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=247"&gt;http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=247&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tags 标签： &lt;a rel="tag" href="http://blog.entlib.com/EntLib/Tags/MVC/Default.aspx"&gt;MVC&lt;/a&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/29.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2008/10/01/microsoft-asp.net-mvc-preview-5-linq-to-sql.aspx</guid>
            <pubDate>Wed, 01 Oct 2008 15:21:29 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/29.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2008/10/01/microsoft-asp.net-mvc-preview-5-linq-to-sql.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/29.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET MVC Framework与WCSF中MVP模式之比较（转）</title>
            <link>http://blog.entlib.com/EntLib/archive/2008/09/02/asp.net-mvc-frameworkwcsfmvp.aspx</link>
            <description>&lt;strong&gt;概述&lt;/strong&gt;
&lt;p&gt;MVC模式已经出现了几十年了，在GUI领域已经得到了广泛的应用，由于微软ASP.NET MVC Framework的出现，致使MVC一度成为.NET社区的热名话题。作为MVC的变种MVP模式，也已经出现好几年了，在微软模式与实践小组提供的Web Client Software Factory （WCSF）中，给出了实现MVP模式的应用程序最佳实践，本文将试着对这两种实现比较一二。&lt;/p&gt;
&lt;p&gt;MVC（Model-View-Controller，模型-视图-控制器）模式是80年代Smalltalk-80出现的一种软件设计模式，后来得到了广泛的应用，其主要目的在于促进应用中模型，视图，控制器间的关注的清晰分离。MVP（Model-View-Presenter，模型-视图-表示器）模式则是由IBM开发出来的一个针对C++和Java的编程模型，大概出现于2000年，是MVC模式的一个变种，主要用来隔离UI、UI逻辑和业务逻辑、数据。在下面的文字中，如无特别说明，MVC均指ASP.NET MVC Framework。&lt;/p&gt;
&lt;strong&gt;处理流程&lt;/strong&gt;
&lt;p&gt;对于处理流程方面两者的区别，用下面这两幅图就可以说明一切：&lt;/p&gt;
&lt;p&gt;&lt;img height="315" width="600" alt="" src="/userfiles/EntLib/image/MVC/MVC_1.gif" /&gt;&lt;/p&gt;
&lt;p&gt;图1：Model-View-Controller&lt;/p&gt;
&lt;p&gt;&lt;img height="315" width="600" alt="" src="/userfiles/EntLib/image/MVC/MVP_1.gif" /&gt;&lt;/p&gt;
&lt;p&gt;图2：Model-View-Presenter&lt;/p&gt;
&lt;p&gt;处理流程方面，在MVC中，用户的请求首先会到达Controller，由Controller从Model获取数据，选择合适的View，把处理结果呈现到View上；在MVP中，用户的请求首先会到达View，View传递请求到特定的Presenter，Presenter从Model获取数据后，再把处理结果通过接口传递到View。&lt;/p&gt;
&lt;strong&gt;View 区别&lt;/strong&gt;
&lt;p&gt;ASP.NET MVC Framework中的View可以是一个ASP.NET页面、用户控件或者是母版页。需要分别继承于ViewPage、ViewUserControl、ViewMasterPage。示例代码：&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public partial class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Views_Blog_New &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;ViewPage
&lt;/span&gt;{
    
}
&lt;/pre&gt;
&lt;p&gt;采用行内代码进行数据的呈现，当然也可以使用服务器控件，示例代码：&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;h2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ASP.NET MVC Framework Sample&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;h2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;hr &lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;
&lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;Html.ActionLink(&lt;span style="color: #a31515"&gt;"Home"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"Index"&lt;/span&gt;)&lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt; |
&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;Html.ActionLink(&lt;span style="color: #a31515"&gt;"New Post"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"New"&lt;/span&gt;)&lt;span style="background: #ffee62"&gt;%&amp;gt;

&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Post &lt;/span&gt;post &lt;span style="color: blue"&gt;in &lt;/span&gt;ViewData)
      { &lt;span style="background: #ffee62"&gt;%&amp;gt;
&lt;/span&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;="postitem"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;strong&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Title&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;strong&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;：&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;Html.Encode(post.Title) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;strong&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Author&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;strong&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;：&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;Html.Encode(post.Author) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;strong&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;PubDate&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;strong&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;：&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;Html.Encode(post.PubDate.ToShortDateString()) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;strong&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Content&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;strong&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;：&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;Html.Encode(post.Description) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;Html.ActionLink(&lt;span style="color: #a31515"&gt;"Edit"&lt;/span&gt;, &lt;span style="color: blue"&gt;new &lt;/span&gt;{action=&lt;span style="color: #a31515"&gt;"Edit"&lt;/span&gt;, Id=post.Id })&lt;span style="background: #ffee62"&gt;%&amp;gt;
&lt;/span&gt;    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;br &lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;
    &lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt; } &lt;span style="background: #ffee62"&gt;%&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;在MVP中，仍然采用WebForm模型，其中View分为View接口和View实现两部分，实现部分可以是ASP.NET页面、用户控件或者母版页：&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public interface &lt;/span&gt;&lt;span style="color: teal"&gt;IProductDetail
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;string &lt;/span&gt;Name { &lt;span style="color: blue"&gt;set&lt;/span&gt;;}

    &lt;span style="color: blue"&gt;string &lt;/span&gt;Brand { &lt;span style="color: blue"&gt;set&lt;/span&gt;;}
}&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public partial class &lt;/span&gt;&lt;span style="color: teal"&gt;Products_ProductDetail &lt;/span&gt;: &lt;span style="color: teal"&gt;Page&lt;/span&gt;, &lt;span style="color: teal"&gt;IProductDetail
&lt;/span&gt;{
}&lt;/pre&gt;
&lt;p&gt;使用服务器控件进行呈现（也可以是HTML控件）：&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: maroon"&gt;Content &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="content" &lt;/span&gt;&lt;span style="color: red"&gt;ContentPlaceHolderID&lt;/span&gt;&lt;span style="color: blue"&gt;="DefaultContent" &lt;/span&gt;&lt;span style="color: red"&gt;Runat&lt;/span&gt;&lt;span style="color: blue"&gt;="Server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;h1&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ProductDetail&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;h1&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;名称：&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: maroon"&gt;Label &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="lbl_Name" &lt;/span&gt;&lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server" &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;=""&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;品牌：&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: maroon"&gt;Label &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="lbl_Brand" &lt;/span&gt;&lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server" &lt;/span&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;=""&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;  
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: maroon"&gt;Content&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;strong&gt;Controller 和 Presenter&lt;/strong&gt;
&lt;p&gt;ASP.NET MVC Framework中，一个View在整个应用程序中可以被多个Controller所调用。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PostController &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;Controller
&lt;/span&gt;{
    [&lt;span style="color: #2b91af"&gt;ControllerAction&lt;/span&gt;]
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;New()
    {
        RenderView(&lt;span style="color: #a31515"&gt;"New"&lt;/span&gt;);
    }
}

&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;BlogController &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;Controller
&lt;/span&gt;{
    [&lt;span style="color: #2b91af"&gt;ControllerAction&lt;/span&gt;]
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;New()
    { 
        RenderView(&lt;span style="color: #a31515"&gt;"New"&lt;/span&gt;);
    }
}&lt;/pre&gt;
&lt;p&gt;MVP中一个View在整个应用程序中只对应一个特定的Presenter：&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public partial class &lt;/span&gt;&lt;span style="color: teal"&gt;Products_ProductDetail &lt;/span&gt;: &lt;span style="color: teal"&gt;Page&lt;/span&gt;, &lt;span style="color: teal"&gt;IProductDetail
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: teal"&gt;ProductDetailPresenter &lt;/span&gt;_presenter;
    &lt;span style="color: blue"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: teal"&gt;EventArgs &lt;/span&gt;e)
    {
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(!&lt;span style="color: blue"&gt;this&lt;/span&gt;.IsPostBack)
        {
            &lt;span style="color: blue"&gt;this&lt;/span&gt;._presenter.OnViewInitialized();
        }
        &lt;span style="color: blue"&gt;this&lt;/span&gt;._presenter.OnViewLoaded();
    }

    [&lt;span style="color: teal"&gt;CreateNew&lt;/span&gt;]
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: teal"&gt;ProductDetailPresenter &lt;/span&gt;Presenter
    {
        &lt;span style="color: blue"&gt;set
        &lt;/span&gt;{
            &lt;span style="color: blue"&gt;this&lt;/span&gt;._presenter = &lt;span style="color: blue"&gt;value&lt;/span&gt;;
            &lt;span style="color: blue"&gt;this&lt;/span&gt;._presenter.View = &lt;span style="color: blue"&gt;this&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对开发过程的影响&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在ASP.NET MVC Framework中，采用行内代码进行数据呈现，逻辑集中在Controller中，但是View无法完全交给UI设计人员完成。在MVP模式中，所有的业务逻辑交给Presenter去处理，这样View中代码就变得及其简洁，将可以轻易的把开发人员和UI设计人员分开，如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img height="312" width="600" alt="" src="/userfiles/EntLib/image/MVC/MVC_VS_MVP_003.gif" /&gt;&lt;/p&gt;
&lt;strong&gt;对单元测试的支持&lt;/strong&gt;
&lt;p&gt;在单元测试方面的支持，ASP.NET MVC Framework在出现的时候就讲促进清晰的关注分离，可测试性和TDD。MVC Framewrok中的所以核心契约都是基于接口的，可以轻易地通过Mock来模拟。可以不用在ASP.NET进程中运行控制器，就能进行单元测试。同时可以使用你想使用的任何单元测试框架来做单元测试，包括NUnit, MBUnit, MS Test等等。&lt;/p&gt;
&lt;p&gt;MVP模式的出现，在一定程度上是为了便于UI的单元测试。由于所有的处理都放在了Presenter中，View中的代码变得及其干净简单，所以可以很方便的进行单元测试，Web Client Software Factory中，提供了自动化项目指导包，可以直接创建测试项目。&lt;/p&gt;
&lt;strong&gt;结束语&lt;/strong&gt;
&lt;p&gt;对于ASP.NET MVC Framework和WCSF中的MVP模式之比较，到这里就结束了，不管是ASP.NET MVC Framework还是WCSF中的MVP模式，都是非常优秀的模型，值得我们更进一步去研究。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;hr /&gt;
Tags 标签： &lt;a rel="tag" href="http://blog.entlib.com/EntLib/Tags/MVC/Default.aspx"&gt;MVC&lt;/a&gt;, &lt;a rel="tag" href="http://blog.entlib.com/EntLib/Tags/MVP/Default.aspx"&gt;MVP&lt;/a&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/12.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2008/09/02/asp.net-mvc-frameworkwcsfmvp.aspx</guid>
            <pubDate>Tue, 02 Sep 2008 01:52:35 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/12.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2008/09/02/asp.net-mvc-frameworkwcsfmvp.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/12.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET MVC Framework 系列技术文章-推荐！</title>
            <link>http://blog.entlib.com/EntLib/archive/2008/09/01/asp.net-mvc-framework.aspx</link>
            <description>&lt;p&gt;下面是 Microsoft 专家 Scott Guthrie 先生针对 ASP.NET MVC Framework 写的系列技术文章。&lt;/p&gt;
&lt;p&gt;A brief Introduction to the ASP.NET MVC Framework by &lt;a target="_blank" href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt;: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;ASP.NET MVC Framework&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx"&gt;ASP.NET MVC Framework (Part 1)&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx"&gt;ASP.NET MVC Framework (Part 2): URL Routing&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx"&gt;ASP.NET MVC Framework (Part 3): Passing ViewData from Controllers to Views&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An excellent &lt;a target="_blank" href="http://www.hanselman.com/blog/ASPNET35ExtensionsPlusMVCHowToScreencast.aspx"&gt;Screencast&lt;/a&gt; by &lt;a target="_blank" href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;p&gt;The &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Model-View-Controller"&gt;MVC&lt;/a&gt; (Model-View-Controller) is a popular pattern to develop UI-centric applications based on a simple concept: divide the implementation into three logical components: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Model, &lt;/li&gt;
    &lt;li&gt;View, &lt;/li&gt;
    &lt;li&gt;Controller. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ASP.NET MVC Framework is an implementation of the MVC pattern, and has built-in support for developing web applications.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/11.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2008/09/01/asp.net-mvc-framework.aspx</guid>
            <pubDate>Mon, 01 Sep 2008 15:26:21 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/11.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2008/09/01/asp.net-mvc-framework.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/11.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>