Scott Guthrie 博客中文版

Scott Guthrie's Blog on ASP.NET and .NET (英文原版地址:http://weblogs.asp.net/scottgu)
随笔 - 203, 评论 - 1034, 引用 - 442

导航

标签

每月存档

最新留言

广告

【第1页/共14页,203条】
首页
前页
1
...
2009年06月09日

【原文地址】June 7th Links: ASP.NET, AJAX, ASP.NET MVC, Visual Studio
【原文发表日期】 Sunday, June 07, 2009 12:05 AM

这里是我的链接系列的最新篇。也请参阅我的ASP.NET 技巧,诀窍和教程网页Silverlight教程网页里我以前写的众多很受欢迎的文章的链接。

你现在还可以在 Twitter(@realscottgu)上跟踪我,我在上面会发布链接和小的贴子。

ASP.NET

  • GridView Confirmation Box using jQuery: Mohammed Azam的一篇好贴子,描述如何使用jQuery来实现模型确认之界面(model confirmation UI),这对象保存或删除数据这样的场景尤其有用。

AJAX

  • ASP.NET 4.0 AJAX – Client Templates: Damien White的精彩贴子,描述ASP.NET AJAX中的新客户端模板支持,这提供了一个简易,强大的方式来在客户端动态创建丰富的HTML界面。

  • ASP.NET 4.0 AJAX - Data Binding: Damien White继续他的ASP.NET AJAX精彩系列,本文描述了新的ASP.NET AJAX版本中的新的客户端数据绑定功能。

ASP.NET MVC

  • DataAnnotations and ASP.NET MVC: Brad Wilson (ASP.NET MVC开发团队的开发人员)有一篇好贴,描述如何使用DataAnnotations来修饰模型对象,然后使用模型绑定器在接受提交的表单输入时自动地对模型做验证。DataAnnotation支持将成为下一个版本的ASP.NET MVC的一部分。

Visual Studio

希望本文对你有所帮助,

Scott

posted on 2009-06-09 10:01:39 by scottgu  评论(1) 阅读(4313)

 
2009年06月07日

【原文地址】IIS Search Engine Optimization Toolkit
【原文发表日期】 Wednesday, June 03, 2009 9:53 AM

SEO (搜索引擎优化) 是任何Internet网站需要在设计时考虑的重要因素之一。网站比率不低的Internet流量是由搜索引擎带来的,好的SEO技术能帮助进一步增加网站流量。

同样地,小的错误可以显著地影响你网站内容的搜索相关性,导致你错过你应该得到的流量。其中一些错误包括: 网站上多个URL通向同个内容,网页上的无效链接(broken links),标题、描述和关键词选择得不恰当,大量的视图,不合法的标识,等等。这些错误经常是非常容易修补的,其挑战性在于如何在网站上发现和精确定位这些错误。

推出IIS搜索引擎优化工具包

今天我们发布了一个新的免费工具,IIS搜索引擎优化工具包(IIS Search Engine Optimization Toolkit)的第一个beta,它将方便你对网站进行SEO分析,识别和修补网站上的问题。

你可以使用我本星期稍早介绍过的微软Web平台安装程序(WebPI)来安装IIS搜索引擎优化工具包。你可以使用IIS SEO 工具包主页上的“install now(现在就安装)”链接,通过WebPI来安装这个工具包。

安装完毕后,你在IIS 7管理工具中可以找到一个新的“Search Engine Optimization(搜索引擎优化)”节,内含若干个SEO工具:

Robots 和 SiteMap 工具允许你轻松地为你的网站创建和管理robots.txt 和 sitemap.xml文件,这些文件帮助引导搜索引擎该抓取和跟随哪些URL,以及不该抓取和跟随哪些URL。

Site Analysis tool(网站分析工具)允许你象搜索引擎一样抓取一个网站,然后使用各种规则对内容进行分析,这些规则能帮助识别内容中的SEO,可访问性(Accessibility)和性能问题。

使用IIS搜索引擎优化工具包的网站分析工具

让我们来看一下如何使用网站分析工具,来快速地检讨网站上的SEO问题。为避免造成他人的难堪(如果将工具用到他们网站的话),我决定将该分析工具应用于我自己的一个网站: www.scottgu.com。这是个我许多年前编写的网站,我想最新一次更新还是在2005年。如果你安装了IIS SEO工具包的话,你可以将它指向我的网站,复制下面的步骤,对它进行深入的SEO分析。

打开网站分析工具

我们首先启动IIS管理工具(inetmgr),点击该工具左栏中树形视图中的根节点(在这个情形下是机器名称: Scottgu-PC )。然后我们在右边选择搜索引擎优化节中的“Site Analysis(网站分析)”图标。象这样在机器层次打开网站分析工具将允许我们对任何远程服务器运行分析工具(假如我们选择了一个网站再打开这个工具的话,那么我们只能对机器上的本地网站进行分析)。

打开网站分析工具,显示下列屏幕,它会列出预先保存的早先创建的网站分析报告。因为这是第一次打开,所以目前是空白的。我们将在管理工具的右手边点击“New Analysis(新的分析)…”,创建一个新的分析报告:

点击“新的分析…”链接会调出象下面这样的对话框,允许我们给报告命名,配置我们要抓取的网站,以及要查看的深度。

我们将把新的报告命名为“scottgu.com”,配置从http://www.scottgu.com URL开始,在站内抓取达10,000个网页(注:如果你没在对话框里看到“起始URL”文本框的话,那是因为你没在管理工具的左栏里选择根机器节点,而是在网站层次打开这个工具的,点击取消,选择根机器节点,然后点击“网站分析”链接)。

在上面的对话框中点击“OK"按钮后,网站分析工具会开始请求http://www.scottgu.com URL,查看返回的HTML内容,然后就象搜索引擎一样抓取网站。我的网站有407个不同的URL,IIS SEO 工具包只花了13秒钟就抓取了所有这些链接,并对下载的内容进行了分析。

完毕之后,它会打开一个总结报告视图,详细列出它发现的东西。在下面你会看到它在我的网站上发现了721个各种规则违反(哎!):

我们可以点击这个总结视图中的任何一项,查看相关细节。在下面,我们将仔细看一下其中几个:

看一下“缺少描述”之违规

你会注意到上面我有137处“缺少描述”规则违反。让我们双击该规则来了解一下,看看每个违规的细节。双击上面有关描述的规则会打开一个新的查询页,自动提供了只跟该描述规则有关的过滤过了的视图(注:如果你想的话,你可以定制该查询,还可以将其输出到Excel,如果你想做更丰富的数据分析的话):

双击上面列表中的任何一条,会打开相关的细节对话框。 每个违规都详述了问题所在,以及如何修补该问题的建议操作:

注意上面,我忘了在我的相片网页(还有别的网页)上加 “<meta>” description 元素,因为我的相片网页目前只显示图片,搜索引擎无法知道上面都是些什么内容。25到150个字符长的描述应该可以解释这个URL是我的相册,来提供更具体的上下文。

“Word Analysis(词汇分析)”页在想该用什么描述文字时会非常有用,这个页会显示该网页的细节(它的标题,关键词等等),显示了网页的HTML中使用了的所有词汇的列表,以及每个词汇重复的次数。它还允许你查看网页上重复多次的所有由2个或3个单词组成的词组,它还列出了其他网页链接到该页时所用的<a>链接的文字,所有这些在想出该用的描述文字时都是非常有用的。

看一下“URL用了不同大小写来链接”之违规

现在我们来看一下这个规则违反:“URL用了不同大小写来链接”。回到总结视图,然后点击这个规则违反:

搜索引擎统计Internet上链到一个URL的网页的次数,然后把这个次数用到引擎的权重算法中,算出URL所显示的内容的相关性。这意味着,如果有1000个网页链接到讨论某个主题的URL,搜索引擎会假定该URL上的内容的相关性要比讨论同个主题却只有10个网页链接的URL高得多。

许多人都不了解,其实搜索引擎对大小写是敏感的,会把不同大小写的URL当作不同的URL来看待。这意味着,一个指向 /Photos.aspx 的链接和一个指向 /photos.aspx 的链接经常不会被搜索引擎当作同一个URL来看待,而是2个不同的URL。这意味着,如果一半的链接指向 /Photos.aspx,另一半指向 /photos.aspx,那么搜索引擎不会给予相片网页应该得到的相关性(实际上,只会有一半的相关性,因为指向它的链接分属两个URL)。因此,找到和修补网站上所有使用了不同大小写URL的地方是非常重要的。

如果我们点击上面的“URL用了不同大小写来链接”,我们可以得到一个列出了网站上用了多个大小写的所有104例URL的列表:

点击任何一个URL会调出特定违例的相关细节,以及网站上多个大小写实例的对话框。注意下面的描述,在网站上发现的两个URL的区别仅在于不同的大小写。在这个情形下,我使用了一个名为"AlbumId"的查询字符串参数链向这个URL,在其他地方,我则用了名为"albumid"的查询字符串参数(小写的“a”和“i”)。搜索引擎会将这些URL当作不同的URL,所以我无法最大化相关内容的网页排名:

了解网站上存在象这样的问题只是第一步,第二步一般来说比较难: 尝试找出这个URL这么个用法需要经由的所有不同的路径。经常地,你会做一下修补,假定它会解决所有的问题,但没想到后来却发现还有你不知道的另一个路径也会造成同样的大小写问题。为帮助解决象这样的场景,你可以在违例对话框的右上角点击"Actions"下拉框,选择其中的"View Routes to this Page(查看通向本页的路径)"链接。

这会调出一个对话框,显示爬虫(crawler)到达特定的URL所经由的所有的步子。下面显示它发现了到达这个特定的URL的两个方式:

能够得到确切的大小写问题的细节, 以及分析到达特定大小写的URL的确切步子,可以极大地方便这类问题的解决。

看一下“网页包含多个规范格式(canonical format)”之违规

象上面那样解决大小写问题是改进网页计数的很好的第一步,但我们还想要解决同样的内容可由不同的URL(其差别不仅仅是大小写的问题)来获取的问题。要解决这个问题,让我们回到总结视图网页,调出“网页包含多个规范格式”的报告:

细节报告会列出网站上的所有可以多种“canonical(规范)”方式访问的URL:

点击其中的任何一项会调出相关问题的细节对话框。注意下面,分析工具检测到了我们把网站主页有时指称为"/",有时又指称为 "/Default.aspx"。 虽然我们的web服务器会把它们解释成执行同一个网页,但搜索引擎会把它们当作两个不同的URL来看待,这意味着搜索的相关性没有应有的那么高(因为权重分给了两个URL,而不是合二为一)。

我们在上面的“Links(链接)”页上可以看到所有用到了 /Default.aspx URL的地方。下面显示了所有指向 /Default.aspx URL 的网页,以及它反过来指向的所有的URL:

我们可以通过点击上面的“Related URLs(相关URL)”下拉框,转换到查看相关的“/” URL都是在什么地方使用以及是怎么使用的等等细节, 点击“Related URLs”会列出显示同样内容的所有的其他URL,允许我们很快地调出相关的细节:

就象在处理大小写违规中那样,我们可以使用“View Routes to this Page(查看通向本页的路径)”选项,找出网站内通向这些不同URL的所有路径,用来帮助我们找出并修补这些问题,这样,我们总是使用共同一致的URL来链向这些网页。

注:解决网站内部链接的大小写(casing)和规范化(canonicalization)问题是很好的第一步,但外部网站还可能有指向我们URL的链接,那些链接是很难完全更新的。修正我们搜索的排名而不要求外部网站更新它们的链接的一个方法是,在我们的web服务器上下载和安装 IIS URL重写模块(可以使用微软Web平台安装程序下载安装的免费模块)。然后我们可以配置URL重写规则自动地做一个永久性的重新定向到正确规范化的URL,这会导致搜索引擎将它们当作同个URL来处理(阅读Carlos的《IIS7 and URL Rewrite: Make your Site SEO》博客贴子了解实现的细节)。

看一下重新定向之违规

作为最后一步,让我们来看一些网站上的重新定向方面违反规则的例子:

探究这个规则分类让我想起我几年前做过的一件事(当时我把博客转移到了另一个网站),我刚发现我的做法明显是很笨的做法。

在我最先建立网站时,我原先有一个在 www.scottgu.com/blog.aspx的博客网页。几个星期后,我决定把它移到 weblogs.asp.net/scottgu。不是把所有网页中的链接改成新的地址,我以为我可以聪明一把,只更新blog.aspx,在其中做一个服务器端的重新定向到weblogs.asp.net/scottgu URL。

这从终端用户的角度来看,自然是工作的。但直到今天运行分析工具前,我都没意识到搜索引擎是不能跟随那个链接的。其原因是,我的blog.aspx做的是个服务器端重新定向到weblogs.asp.net/scottgu URL。但为了其本身的SEO的缘故,weblogs.asp.net上的博客软件(Community Server),为了修正进来的weblogs.asp.net/scottgu URL,接着又做了第二个重新定向到http://weblogs.asp.net/scottgu/ (注意,后面加了一个斜杠)。

根据网站分析工具里的规则违反,在你连续做2个服务器重新定向时,搜索引擎就会放弃。它检测到我的blog.aspx重新定向链接到一个外部链接,这个外部链接进而又做了另一个重新定向,在这一刻,搜索引擎爬虫就放弃了:

我不用打开blog.aspx网页的服务器端代码就能确定这就是问题所在。我需要做的是在违例对话框中点击"Headers"页,看一下blog.aspx网页传回的重新定向HTTP回复。注意,它的结尾没有斜杠(所以导致Community Server在收到请求时又做了另一个重新定向):

修补这个问题是很容易的,但我从没有意识到我实际上有问题,如果没有网站分析工具向我指出来的话。

将来的自动纠正支持

在抓取我的网站时,网站分析工具还发现了其他一堆规则违反和内容问题。发现和修补这些问题是非常直截了当的,与上面的步骤非常类似。每修补一个问题,都使得我的网站比以前更干净,更容易抓取,帮助它取得更高的搜索相关性。这进而会造成从搜索引擎到我网站的流量的增加,这是非常有成本效率的投资收益。在分析报告生成和保存后,它会出现在IIS管理工具的报告列表中。在任何时候,你都可以右击该报告,叫IIS SEO工具包重新运行一下,允许你定期地确认没有引进原先的问题。

今天发布的网站分析工具预览版本会在抓取一个网站时核实50个规则。在以后,我们会添加更多的规则,检查另外的问题和场景。在将来的预览版本中,你还将开始看到SEO分析工具将具更多智能,允许它在服务器端核实你安装了的URL重写模块配置了一套对SEO友好的规则。网站分析工具还可以通过建议你可以直接从网站分析报告工具中加到网站的重写规则,允许你自动修补某些规则违反(例如:修正象我们前面看过的 “/” 和 “/Default.aspx” 这样的规范化问题)。这会更加方便在网站上执行好的SEO。在那之前,我推荐你阅读下面的链接,了解如何手工配置对SEO有好处的URL重写规则:

结语

IIS搜索引擎优化工具包将方便你分析和评估你网站的搜索引擎友好程度。它会指出对SEO的规则违反,提供如何修补它们的指令。你可以从下面这些链接中进一步了解该工具包的详情以及如何充分利用它:

IIS搜索引擎优化工具包是免费的,安装的时间少于1分钟,可以针对任何现有web服务器或网站进行分析。不用在远程服务器上安装任何东西就可使用,只要输入网站的URL,你就可以得到一个网站分析报告,内含你可以马上用来改进你的网站的建议。

今天的发布是个beta,所以务请使用IIS搜索引擎优化工具包论坛告知我们,如果你遇上问题或要建议功能的话。

希望本文对你有所帮助,

Scott

【译注】本文翻译得匆忙,如有不妥之处请见谅,但务请指正,谢谢!

posted on 2009-06-07 11:31:32 by scottgu  评论(0) 阅读(3512)

 
2009年06月03日

【原文地址】Microsoft Web Platform Installer
【原文发表日期】 Tuesday, June 02, 2009 2:21 AM

今年即将出笼的一个非常酷的产品是一个很小的下载管理程序 - 微软Web平台安装程序(Microsoft Web Platform Installer),它极大地简化了web服务器和web开发设施的安装和配置。这是个你可从www.microsoft.com/web 网站下载的免费工具 (这里是该工具的直接链接 )。它可在Windows XP, Vista, Windows 7, Windows Server 2003 和 Windows Server 2008下工作。

Web Platform Installer提供了一个简易的方式,可让你在Windows机器上快速安装和定制开发或部署网站和应用所需的所有软件。这个工具自动地分析你系统目前安装的东西,允许你轻松地标记需要添加的额外组件,然后在你点击安装按钮时,自动一次就完成所有安装,免去了你自己手工安装每个组件的必要。

例如,你可以点击上面的“Web Server”来定制安装在机器上的各个IIS web服务器模块。这包括了随Windows一起发布的内置IIS模块(如目录浏览模块),以及可以单独下载的额外的模块。下面我选择了要安装的2个额外的模块 - 应用请求路径选择(Application Request Routing)和URL重写模块(URL Rewrite):

URL重写模块是个微软提供的免费模块,允许你在网站上发布定制的URL,将它们做搜索引擎优化(SEO)。你可以通过它来强制SEO规则(统一的大小写,内嵌的关键词等等),以及定制你网站从外部的角度来看是怎么组织的(管理工具甚至会指导你如何编写正则表达式规则):

应用请求路径选择模块也是个微软提供的免费模块,支持转交代理风格(forward-proxy style)的场景,允许在多个web服务器机器间动态平衡用户请求的负载(允许你向外延展(scale out),将机器移到DMZ火墙后场景,将机器从机群中移入移出来做维护,而不必中止服务)。

除了URL重写和应用请求路径选择模块外,还有若干个其他的服务器模块,你可以选择来启用WebDAV, 安全的FTP, 自动化的部署,通过IIS管理工具在远程主机场景中远程管理数据库,媒体服务器流传播场景,等等。你还可以安装框架级的东西,象ASP.NET MVC, .NET 3.5 SP1, SQL Express 和有关的SQL管理工具, Visual Web Developer 2008 Express,等等。

Windows Web应用陈列室

Web Platform Installer 还集成了新的在线Windows Web应用陈列室(Web Application Gallery):www.microsoft.com/web/gallery

这个陈列室允许你在你的服务器上轻松地安装现有的web应用。该陈列室包括了多个很流行的 .NET 开源应用(象DotNetNuke, ScrewTurn Wiki和 Umbraco CMS),以及PHP开源应用(包括WordPress 和Drupal)。你可以使用Web Platform Installer对它们进行浏览和安装(点击“Web Applications”页,查看你要安装的应用):

;

除了下载应用外,Web Platform Installer还会创建新的网站/应用根目录,配置合适的网站设置和提供安装数据库的选项。

结语

如果你还没有下载Web Platform Installer的话,我建议你对它做一下研究。我认为,你会发现用它来配置和运行服务器真是容易之极,它极大地方便了发现和安装Windows web服务器设施的各种组件,发现和安装在其上的应用。在以后,你会发现我们会将越来越多的功能以这种方式来发布。

你今天就可以下载和开始使用Web Platform Installer 2.0 Beta,今夏我们将发布其最终版本。

希望本文对你有所帮助,

Scott

posted on 2009-06-03 12:04:02 by scottgu  评论(1) 阅读(3950)

 
2009年06月01日

【原文地址】May 30th Links: ASP.NET, AJAX, ASP.NET MVC, Visual Studio
【原文发表日期】 Saturday, May 30, 2009 3:39 PM

这里是我的链接系列的最新篇。也请参阅我的ASP.NET 技巧,诀窍和教程网页Silverlight教程网页里我以前写的众多很受欢迎的文章的链接。

你现在还可以在 Twitter(@realscottgu)上跟踪我,我在上面会发布链接和小的贴子。

ASP.NET

AJAX

  • Automatically Minify and Combine JavaScript in Visual Studio: Dave Ward有一篇精彩文章, 描述如何在Visual Studio中加一个build命令,以允许你自动地压缩和合并客户端JavaScript文件。这可以使得你的网页在客户端装载起来很快,改进你的网站的感觉性能(perceived performance)。

  • Client-side Data Binding in ASP.NET AJAX 4.0: Fritz Onion有一篇精彩文章,是关于ASP.NET AJAX 4.0中新的客户端模板功能的(你今天就可以下载ASP.NET AJAX 4.0,并在.NET 3.5项目中使用)。该功能促成了针对基于JSON之数据的强大的客户端数据绑定场景。也请看一下Politian的博客,上面有一些关于如何使用它的精彩教程。

ASP.NET MVC

  • Visual Studio NUnit Templates for ASP.NET MVC: VS Web工具开发团队刚发布了可以用于ASP.NET MVC 1.0的NUnit模板,这允许你在使用 文件->新项目,选择ASP.NET MVC 1.0项目时, 自动创建使用NUnit的测试项目,而不是MSTest。

  • Custom Route Constraints in ASP.NET MVC: Keyvan Nayyeriu的一篇好贴,讨论了如何在ASP.NET MVC中创建定制的路径限制(上面Simone贴子中的可扩展点之一)。你可以用这些限制来控制是否采用一个路径规则,可以促成一些非常丰富的路径选择场景。注意,除了创建路径限制类外,ASP.NET MVC还支持使用正则表达式和HTML方法过滤器来限制路径。Keyvan和Simone是《Beginning ASP.NET MVC》(提供免费章节)一书的共同作者。

Visual Studio

希望本文对你有所帮助,

Scott

posted on 2009-06-01 08:36:56 by scottgu  评论(1) 阅读(4271)

 
2009年05月28日

【原文地址】LIDNUG: Free Online Virtual Chat with Me Today
【原文发表日期】 Wednesday, May 27, 2009 1:47 AM

今天(星期三), LIDNUG (Linked .NET Users Group) 将从太平洋标准时间上午11:30点 to 下午1点(北京时间星期四凌晨2点半到4) 主持一个和我在线聊天的活动,任何人都可以参加,聊天的主题不限, 所以请带问题来!

点击这里了解如何注册以及参与聊天的细节。

静候大驾光临!

Scott

posted on 2009-05-28 13:47:12 by scottgu  评论(1) 阅读(3502)

 
2009年04月29日

【原文地址】Free ASP.NET MVC “NerdDinner” Tutorial Now in HTML
【原文发表日期】 Tuesday, April 28, 2009 12:44 AM

上个月,我曾在博客中写到我为Wrox Press的《Professional ASP.NET MVC 1.0》一书撰写的一个名叫NerdDinner的ASP.NET MVC免费教程,该书已经发行,可在Amazon购买。

NerdDinner教程全程示范如何使用ASP.NET MVC建造一个小型但完整的应用,介绍了其后一些核心的概念。你可以在这里下载该教程的PDF版本。

NerdDinner教程的HTML版本也发布了

几分钟前,我刚发布完NerdDinner教程的HTML版本,你可以在这里在线免费阅读。

我把教程分割成了12个片段,以方便你阅读。我还把屏幕截图放大了,使用了一个Scott Hanselman帮我设置的很棒的句法加亮工具器(syntax highlighter)。实际上,我发现其结果比之PDF版本易读多了。

下面是NerdDinner教程各个片段的链接:

希望本文对你有所帮助,

Scott

posted on 2009-04-29 07:24:07 by scottgu  评论(0) 阅读(5472)

 
2009年04月02日

【原文地址】ASP.NET MVC 1.0
【原文发表日期】 Wednesday, April 01, 2009 6:53 PM

mvcsource[1] 二个星期前在MIX大会上,我们发布了ASP.NET MVC 1.0版本。ASP.NET MVC是一个免费的,完全支持的微软产品,该产品允许开发人员轻松地使用model-view-controller(模型-视图-控制器)模式来建造web应用。ASP.NET MVC提供了一个“更接近于底层的(closer to the metal)”的ASP.NET web编程选项。它允许对HTML标识和URL结构的完全控制,方便单元测试和促进测试驱动开发的工作流程。

在MS-PL许可下发布ASP.NET MVC源代码

今天,我非常兴奋地宣布,我们将在Microsoft Public License (MS-PL)许可下发布ASP.NET MVC源代码。MS-PL是一个OSI批准的开源许可。MS-PL不包括任何平台方面的限制,提供了很广的修改和重新发布源代码的权限。你可以在http://www.opensource.org/licenses/ms-pl.html 阅读MS-PL许可的文本。

了解ASP.NET MVC详情

想了解ASP.NET MVC详情的话,你可以阅读我的免费ASP.NET MVC PDF教程(【译注】参阅EntLib的中文版),该教程讨论了从头至尾开发一个应用的过程,实实在在是从 文件->新项目 开始的。

今年的MIX大会上有若干个很精彩的ASP.NET MVC讲座,下面是其中一些讲座的链接:

http://www.asp.net/mvc上还有若干个很精彩的ASP.NET MVC教程,你还可以阅读ASP.NET MVC MSDN 文档

下载ASP.NET MVC

点击这里下载和安装 ASP.NET MVC 1.0版本,你也可以使用新的微软Web平台安装器第二版(Microsoft Web Platform Installer V2)来安装,该安装器提供了微软整体web平台工具的集成的安装体验。

ASP.NET MVC 1.0源代码已经发布了,在ASP.NET MVC 下载网页上,向下卷动到底部,你可以找到指向ASP.NET MVC 1.0集成 MSI安装文件,以及包含ASP.NET MVC源代码的.zip文件的链接。ASP.NET MVC源代码中包括一个 VS 2008 项目文件,允许你用来编译ASP.NET MVC。

希望本文对你有所帮助,

Scott

posted on 2009-04-02 10:47:56 by scottgu  评论(3) 阅读(7271)

 

【原文地址】MIX 09
【原文发表日期】 Tuesday, March 31, 2009 11:37 PM

二个星期前,我们在拉斯维加斯举办了MIX大会。MIX是我最喜欢的年度大会,因为它把开发和设计方面的主题在一个会议中很好地整合在一起,而且通常还附带一些非常酷的产品宣布。

今年,我又做了首日MIX主题演讲,在其中,我谈到和宣布了一堆新的微软web开发产品。这些产品包括:

我的主题演讲还包括了成堆的示范,突出介绍了好几个重要客户,他们包括StackOverflow, NetFlix, NBC, Bondi Publishing, 和 KEXP公司。

点击这里在线观看首日的MIX主题演讲。Bill Buxton首先出场,花了20分钟的时间大谈用户体验,之后我讲了1个小时50分钟。

你还可以在这里在线免费观看所有的MIX分会场讲座。Greg Duncan还在此提供了一个便于导航的讲座列表。

不久我将发表一些更深入的博客贴子,讨论我们介绍和宣布了的许多技术,以及你可以用它们来做的所有酷的事情。

希望本文对你有所帮助,

Scott

posted on 2009-04-02 09:41:09 by scottgu  评论(0) 阅读(7924)

 
2009年03月11日

【原文地址】Free ASP.NET MVC eBook Tutorial
【原文发表日期】 Tuesday, March 10, 2009 2:54 PM

bookcover[1] 对即将发布的新ASP.NET MVC框架(说真的,随时都会发布 -- 请静候宣布),社区里到处洋溢着兴奋。就象对任何新的东西,大家也开始征询更多的教程/例程/文档,以了解如何起步和用它来建造应用。

在过去的几个月内,我一直在给Scott Hanselman, Rob Conery, 和 Phil Haack 为Wrox出版社写作的一本ASP.NET MVC方面的书帮着贡献章节。该书目前正在制作过程中,不久就会在书店发行(你今天就可以在亚马逊书店预订)。

我撰写了该书的第一章,是个185页的教程,从头开始按部就班地建造起一个小型但完整的ASP.NET MVC应用。我与Wrox出版社的协议是,我为他们免费撰写这个教程,作为回报,他们将提供免费的PDF下载。

我非常兴奋地宣布,你现在可以 下载这个免费的教程章节了(14M的PDF文件),该教程是在“Creative Commons Attribution No Derivatives”许可下发布的,意味着你可以共享,发布,打印或者发给任何人。

NerdDinner ASP.NET MVC 教程

该教程从在Visual Studio中使用“文件->新项目”命令开始,创建一个崭新的ASP.NET MVC项目,然后逐步添加功能和特性,在过程中,它讨论了如何:

  • 创建数据库
  • 建造带有验证和业务规则的模型
  • 使用控制器和视图实现数据列表和细节界面
  • 实现CRUD(创建,读取,更新,删除)数据表单输入
  • 使用ViewModel模式将信息从控制器中传给视图
  • 使用用户控件和母版页在网站上重用界面
  • 实现高效数据分页
  • 使用认证和授权实现应用安全
  • 使用AJAX实现动态更新
  • 使用AJAX添加可交互性地图支持
  • 执行自动化的单元测试(包括依赖注入和mocking)

该教程建造的应用名为“NerdDinner”,提供了一个简易的方式来在线组织,主持和查询基于新主题的晚餐活动:

nerddinner_small[1]

Scott Hanselman 已经主持NerdDinners多年, 是他出主意来建造一个方便这个活动的应用的教程,他还在www.nerddinner.com提供了该应用的定制了皮肤的上线版本。

下载链接

希望本文对你有所帮助,

Scott

【附注】 该书刚进入制作过程,尚处于非编辑状态(意即专业编辑人员还没开始编辑),一旦最终文字出来,我们会更新PDF版本。

【附注二】 是的,这是我的博客过去几个月一直很冷清的原因之一,待我复原之后,请再次期待更多的博客帖子,:-)。

posted on 2009-03-11 08:50:54 by scottgu  评论(1) 阅读(17505)

 
2009年02月12日

【原文地址】Moonlight 1.0 Release
【原文发表日期】 Wednesday, February 11, 2009 5:27 PM

我在此非常兴奋地宣布,Novell 今天发布了Moonlight 1.0,可免费下载,支持大多数主流Linux版本(包括openSUSE, SUSE Linux Enterprise, Fedora, Red Hat, 和 Ubuntu)。对那些不熟悉该产品的,Moonlight是Novell和微软针对Linux联合开发的Silverlight开源实现。

我的团队与Miguel de Icaza和他的团队在这个项目上紧密合作,我们还发布了微软媒体包(Microsoft Media Pack),该包是一套授权了的媒体编码器(licensed media codecs),可用来播放所有与Silverlight兼容的媒体(wmv, wma, mp3等等),可为运行Moonlight的Linux用户免费下载。

Moonlight将允许Linux用户浏览Silverlight内容和使用Silverlight应用。最近,总统就职委员会使用Silverlight转播了Barack Obama总统的就职典礼。超过五万使用了Linux的用户安装Moonlight,在线观看了这个现场活动。Miguel de Icaza和Moonlight的志愿者们做了极大的努力,确保Linux用户能够观看就职典礼的转播,尽管当时离Moonlight的正式发布尚有几个星期的时间。

image

我对Miguel和他Novell的团队所做的令人敬畏的工作感到非常兴奋,我们非常期望看到他们正努力开发的Moonlight 2(与Silverlight 2兼容,支持.NET的开源实现)。想了解Moonlight 1.0详情的话,请参阅Miguel的相关博客

谢谢,

Scott

posted on 2009-02-12 11:02:02 by scottgu  评论(0) 阅读(7247)

 
2009年02月03日

【原文地址】ASP.NET MVC 1.0 Release Candidate Now Available
【原文发表日期】 Tuesday, January 27, 2009 12:13 PM

今天,我们发布了ASP.NET MVC 1.0 最终版的候选版本(简称RC)。 点击这里下载(注:该链接才上线,所以如果链接不工作的话,请等几分钟,让你访问的服务器有机会更新)。该版本可以在Visual Studio 2008和免费的Visual Web Developer 2008下工作。

今天的ASP.NET MVC RC版本是我们在发布最终的1.0版本前的最后一个公开版本。我们预计在下个月(【译注】,指2月份)发布ASP.NET MVC 1.0 的最终版。

除了缺陷修补外,今天的版本还包含了若干个新的功能。它还包含了基于客户反馈对现有功能的几个改善。请阅读随ASP.NET MVC下载一起发布的发布说明,以了解所有改动的完整细节。该发布说明也包含了如何把用ASP.NET MVC Beta版本建造的现有应用升级到RC版的详细指令。

Visual Studio工具方面的改进

RC版本包含了Visual Studio工具方面的几个新功能(是在beta版本提供的新功能之外的,在这里我就不讨论beta中的这些功能了),这些功能包括:

添加控制器的命令

你现在可以在ASP.NET MVC项目中间键入Ctrl-M, Ctrl-C,或者右击 /Controller 文件夹,然后选择“Add->Controller(添加控制器)”上下文菜单项来创建新的控制器类:

这会调出“添加控制器”对话框,允许你给要创建的控制器取名,以及表示你是否想自动地生成(scaffold)常见的CRUD方法:

点击“添加”按钮会生成一个控制器类,并将它加到项目中去:

添加视图的命令

你现在可以在一个控制器的action方法中键入Ctrl-M, Ctrl-V,或者在一个action方法中右击,选择“添加视图”上下文菜单项来生成新的视图模板:

这会调出“添加视图”对话框,允许你给要创建的新视图取名(其中预先填充了基于约定的选项)。它允许你创建“Empty(空白)”的视图模板,或者根据控制器的action方法传给视图的对象类型自动地生成或scaffold视图模板。脚手架(scaffolding)基础设施在生成视图模板时会使用反射,这样它可以基于传给它的任何POCO (plain old CLR object,普通的CLR对象)生成新的模板。它对任何特别的ORM或数据实现都没有依赖性。

例如,在下面,我们表示想要基于从上面的action方法中传入的Product对象序列生成一个“列表”视图模板:

点击“添加”按钮会在 \Views\Products\ 文件夹中生成一个视图模板,内含默认的“脚手架”实现:

然后,我们运行应用,并在浏览器中请求 /products URL,就会看到取出的产品列表:

RC版本发布了好几个内置的脚手架模板:“Empty(空白)”, “List(列表)”,“Details(细节)”,“Edit(编辑)”和“Create(创建)”(你也可以添加自己的脚手架模板,稍后会提供更多细节)。

例如,要支持产品编辑,我们可以象下面这样在Products控制器上实现“Edit” action方法的HTTP-GET版本,然后调用“添加视图”命令:

在“添加视图”对话框中,我们可以表示我们将把一个Product对象传给我们的视图,然后选择“Edit”模板选项来生成脚手架实现:

点击“添加”按钮会在 \Views\Products\ 文件夹中生成一个编辑视图模板,内含默认的脚手架实现:

然后,我们可以运行应用,在浏览器中请求/products/edit/1 URL,来编辑Product细节:

要保存编辑后的改动,我们可以在Products控制器中实现“Edit” action方法的HTTP-POST版本:

注意在上面的代码中,在出错的情形下(例如,有人给一个数字型的值输入了一个非法的字符串),我们是如何重新显示视图的。“Edit(编辑)”和“Create(创建)”脚手架模板包含了在这种情形发生时,为保留用户输入和用红字标志不合法的输入元素所需的HTML验证辅助方法:

你最终大概不会原封不动地使用脚手架生成的模板,经常会完全换掉这些模板。但能够得到一个初始的实现并能很快地运行起来,针对你的场景有一个你可以轻松细调的起始视图模板是非常有用的。

因为脚手架基础设施支持针对任何普通的CLR对象生成脚手架视图,你既可以将其用于领域模型对象(包括用LINQ to SQL, LINQ to Entities, nHibernate, LLBLGen Pro, SubSonic, 和其他流行的ORM实现映射的对象),也可以用于自定义的Presentation Model/ViewModel类。

添加和定制脚手架模板

ASP.NET MVC的脚手架基础设施是用Visual Studio内置的T4模板架构(Scott Hanselman 在这里有一篇关于T4的好博客)来实现的。

你可以定制/改动任何内置的ASP.NET MVC脚手架模板实现。你还可以创建另外的脚手架模板(例如,ScottGu Crazy Look脚手架选项),让它们在“添加视图”对话框中作为选项显示出来。

要在整个机器层次定制/添加脚手架模板,打开 “C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC\CodeTemplates” 文件夹:

AddController 子文件夹包含了“添加控制器”对话框中的脚手架模板,而“AddView”子文件夹则包含了“添加视图”对话框中的脚手架模板:

填充在“添加视图”对话框中的脚手架模板只是带“.tt”文件扩展名的文本文件而已,这些“.tt” 文本文件包含了在模板被选中时会运行的行内C# 或 VB代码:

你可以打开和编辑任何现有的文件来定制默认的脚手架行为,你还可以添加新的“.tt”模板文件 -- 就象我在上面加的“Scott Crazy Look.tt”文件一样。在添加新的模板文件之后,“添加视图”对话框会更新,自动将其包括在可使用的脚手架选项列表之中:

除了在机器层次定制/添加模板文件外,你还可以在个别项目层次添加/改动这些模板文件,这还允许你将这些模板签入源码控制系统,在整个团队间轻松地使用它们。

你可以通过在项目下面加一个CodeTemplates文件夹,来在项目层次定制脚手架模板,然后你可以在其中建立“AddController”和“AddView”子文件夹:

你只要在项目中加一个同名的“.tt”文件,就可以覆盖任何一个默认的机器层次的模板文件。例如,在上面,我们覆盖了用在“添加控制器”场景中的默认“Controller.tt” 脚手架模板。

你可以将新的视图脚手架模板文件置于“AddView”文件夹中即可加入到列表中。例如,在上面,我们在项目中加了一个“Yet Another Crazy Look.tt” 视图模板。在使用“添加视图”对话框时,我们现在就会看到定义在机器和项目层次的所有模板的集合:

注: 当你将 “.tt”模板加到 \CodeTemplates 文件夹中时,确认在属性表格中将每个“.tt”模板文件的“Custom Tool(定制工具)”属性设成了空白字符串(否则的话,在运行时你会得到错误),你也许还需要关闭和重新打开项目以清除错误列表中会出现的一个伪错误。不久,我们将发表更多讨论创建/定制脚手架模板的博客贴子。

转到控制器/转到视图命令

RC版现在支持在项目中的控制器和视图间的快速导航。

当你的鼠标在控制器的action方法中时,你可以键入Ctrl-M, Ctrl-G,来快速地导航到对应的视图模板。你也可以通过在当前的action方法中右击,选择“Go To View(转到视图)”菜单选项才实现同样的导航跳跃:

在上面的例子中,我们在ProductsController类的“Edit” action方法中用了“Go To View”命令,这会在VS中打开\Views\Products\Edit.aspx视图模板,并使其拥有默认的焦点:

在视图模板中,你现在还可以键入 Ctrl-M, Ctrl-G 来快速地导航到视图对应的控制器类中。你也可以在视图模板中右击,选择“Go To Controller(转到控制器)”菜单选项来实现同样的导航操作:

编译视图的MSBuild任务

在默认情形下,当你编译一个ASP.NET MVC项目时,它会编译项目中除了视图模板文件中代码以外的所有代码。在ASP.NET MVC Beta版本中,如果你想要编译视图模板中的代码的话,你需要编写自己的MSBuild任务。ASP.NET MVC RC 版本则包含了一个内置的MSBuild 任务,你可以用它来把视图包括成为项目编译过程的一部分。该任务会核实应用中所有视图,母板页,部分视图的语法和其中的行内代码,如果遇上问题的话,会给你编译错误。

但因为性能的缘故,我们不建议在开发期间运行它来做快速编译,但将它加到特定的编译配置(例如,staging和部署)或者在与 Build 或 CI (连续集成)服务器一起使用时还是非常方便的。 请参阅发布说明中有关启用该任务的详细步骤。

重构视图的支持

在你使用VS 2008的“Rename(重新命名)”重构命令对控制器类或action方法重新命名时,\Views子文件夹中的文件和文件夹名现在会自动更新。VS 2008 会在控制器类被更新时,将标准的基于约定的命名模式施用于现有的视图文件/文件夹。

视图方面的改进

RC版包括了若干个特定于视图的改进,这些改进是基于预览版的反馈融合进来的。

不带后台代码文件的视图

基于反馈,我们把默认的视图模板改成了不再带后台代码文件,这个变动有助于强化视图在MVC应用中的目的(视图意在纯粹的显示,不该包含任何与显示无关的代码),去掉了项目中没被使用的文件(对大多数人来说)。

RC版本现在添加了对从使用泛型的基类继承视图模板的C#和VB句法支持。例如,在下面,我们在Edit.aspx视图模板中使用了这个句法,它的 “inherits”属性是从ViewPage<Product> 类型继承而来的:

不使用后台代码文件的一个好处是,在将视图模板文件加到项目后,你现在能立刻得到intellisense。在以前的版本中,你需要在生成视图后马上编译一次才能在其中得到intellisense。RC版本使得添加和立刻编辑视图文件的流程不再需要编译,过程也更加流畅。

重要主要事项: 如果你在把用以前版本创建的ASP.NET MVC项目升级到RC版,请确认遵循发布说明中的步骤,即,\Views文件夹中的web.config文件中的一些设置需要更新一下,上面的基于泛型的句法才会工作。

Model属性

在以前的ASP.NET MVC版本中,你使用ViewData.Model属性来访问传给视图的强类型模型对象:

上面的句法依然工作,虽然现在你还可以使用ViewPage上一个顶层的"Model"属性:

这个属性的功能跟前面的代码例子完全一样,它主要的好处在于,它允许你编写简明的代码。它还允许在你想要视图模板只与传给它的强类型模型打交道的情形下,避免使用ViewData字典。

设置标题

加到新的ASP.NET MVC项目的默认母板页模板在<head>部分拥有一个<asp:contentplaceholder/>元素,这可方便视图模板来控制要显示的HTML页面中的 <title> 元素,而不需要控制器明确地传递一个“title” 参数来配置它(这个方法是以前ASP.NET MVC版本中的默认方法,从责任的角度来看,我们认为是有问题的)。
(【译注】该功能也引入了一个缺陷,详情请参考Phil Haack的博客 Controls Collection Cannot Be Modified Issue with ASP.NET MVC RC1,你需要下载RC的更新版,还请参阅的Phil Haack的博客 ASP.NET MVC RC Refresh

例如,为定制Edit视图的<title>来包括当前产品的名字,我们现在可以加下面的代码到Edit.aspx模板中,直接根据传进视图的模型对象生成标题:

然后,上面的代码就会使得浏览器在运行时使用产品名显示标题:

除了设置<title>元素外,你还可以使用上面的方法在运行时动态地添加其它<head>元素。这会非常有用的另一个常见场景是,为搜索引擎优化(SEO)配置特定于模型/视图的<meta/>元素。

强类型的HTML/AJAX辅助类

有一个不少人都提出的要求是,在使用视图的HTML和AJAX辅助对象时,在指称Model时使用强类型表达式的句法(而不是字符串)的能力。

在ASP.NET MVC Beta版本中,这是不可能的,因为HtmlHelper和AjaxHelper辅助类并没有在它们的签名中呈示模型的类型,所以大家需要建造直接基于ViewPage<TModel>基类的辅助方法才能达成这个目的。

ASP.NET MVC RC 版本引进了新的HtmlHelper<TModel>和 AjaxHelper<TModel> 类型,是在ViewPage<TModel> 基类上呈示的。这些类型现在允许任何人建造使用了表达式句法的强类型HTML和AJAX辅助扩展来指称View的模型。 例如:

核心ASP.NET MVC V1程序集中的HTML表单辅助扩展方法还将使用不是基于表达式的字符串句法,今天发布的MVC Futures程序集(可在RC版下工作)有几个基于表达式句法的表单辅助方法的初始实现,我们计划对这些方法多迭代几次,然后考虑在下一个版本中把它们加到ASP.NET MVC核心程序集中。

当然,你还是可以添加自己的辅助方法(使用基于字符串或强类型的表达式方法)。内置的HTML/AJAX 辅助方法都是可以去掉的(因为它们是扩展方法),如果你要用自己的版本来替换或覆盖它们的话。

表单提交方面的改进

RC版本包括了若干个特定于表单提交方面的改进:

在常见场景下不再要求[Bind(Prefix=””)]

RC版本不再要求你明确地使用[Bind]特性(或将其前缀值设置为"")才能将进来的没有前缀的表单提交参数映射到复杂的action方法参数上了。

要理解其意义,让我们来实现ProductsController的 “Create” 场景。我们先来实现“Create” action方法的HTTP-GET 版本,我们用下面的代码来返回一个基于空白的Product对象的视图:

然后我们在action方法中右击,选择“添加视图”命令,生成基于一个Product对象的“Create” 视图模板的框架:

注意上面我们的Html.TextBox()辅助方法是如何引用产品对象上的“ProductName”和“SupplierID”属性的。这会生成象下面这样的HTML标识,其中的input “name” 属性是 “ProductName” 和 “SupplierID”:

然后,我们可以实现“Create” action方法的HTTP-POST 版本,该方法接受一个Product对象作为参数:

在 ASP.NET MVC Beta版本中,我们需要在上面的Product参数前加一个[Bind(Prefix=””)]特性,否则的话,ASP.NET MVC绑定基础设施只会寻找带“productToCreate.”前缀的表单提交值(例如,productToCreate.ProductName 和 productToCreate.SupplierID),而不会找到我们表单的提交值(因为这些值没有对应的前缀)。

在RC版本中,默认的action方法绑定器开始还会尝试将productToCreate.ProductName表单值映射到Product对象上。但如果它们找不到这样的值的话,它们现在会尝试将“ProductName” 映射到Product对象上。这使得你需要传递复杂对象到action方法的场景的句法更加干净和简明。你可以在映射领域对象(象上面的Product对象)以及Presentation Model/ViewModel类(象ProductViewModel 类)时利用这个功能。

我们的Create action方法的一个完整的实现(包括基本的输入类型错误处理)会象这样:

现在,我们的Create action方法会保存Product对象,如果所有的值都输入正确的话。在用户尝试使用不合法的产品属性值创建Product时,例如,用“Bogus” 字符串来替换一个合法的Decimal值,表单就会重新显示,用红字标记非法的输入元素:

ModelBinder API方面的改进

ASP.NET MVC RC版中的模型绑定基础设施已经重构过了,加了额外的扩展点,允许自定义的绑定和验证定义。你可以阅读ASP.NET MVC RC的发布说明以了解这些细节。

除了注册为类外,现在的模型绑定器还能注册为接口。

IDataErrorInfo支持

ASP.NET MVC 中默认的模型绑定器现在支持实现了IDataErrorInfo接口的类。这允许以一种共同的方式来抛出验证错误信息,该方式可在Windows Forms, WPF ,以及现在的 ASP.NET MVC应用中公用。

单元测试方面的改进

ASP.NET MVC RC版本包括了单元测试方面一些显著的改进:

ControllerContext不再从RequestContext继承而来

RC版本包括了对 ControllerContext类的重构,该重构极大地简化了常见的单元测试场景。ControllerContext不再从RequestContext继承而来,而是在其中封装了RequestContext,将其呈现为一个属性。ControllerContext的属性和继承类现在都是virtual的,而不是sealed的了,这极大地方便了mock对象的创建。

要理解其有助之处,让我们来考虑一个象下面这样的action方法,其中使用了内置的“Request” 和 “User” 对象:

在以前的ASP.NET MVC版本中测试上面的action方法要求模拟RequestContext和 ControllerContext(还在RouteData对象中引进了一些不是显而易见的构造器)。

在RC版中,我们现在可以象下面这样单元测试(使用了Moq框架来模拟我们Controller的ControllerContext,允许我们模拟Request.IsAuthenticated 和 User.Identity.Name属性):

这样的重构改进不光有助于测试控制器的action方法,还有助于测试过滤器,路径,自定义的actionresult类型,已经其它各种场景。

AccountsController的单元测试

包括在RC版中的ASP.NET MVC项目模板现在添加了25个预制的单元测试,这些测试是用来核实AccountsController类的行为的(该类是在默认情形下加到项目中,用来处理登录和帐号管理场景的)。这方便了重构和更改AccountsController。AccountsController的实现也被修改过了,以利于基于非成员提供器的权限系统的集成。

防范跨站请求伪造攻击(Cross Site Request Forgery-简称CSRF)

跨站请求伪造攻击(也称为XSRF攻击)会导致使用了信任的浏览器代理的用户在一个网站上采取非计划中的行动。这些攻击依赖于用户也许还登录了另外一个网站这样一个事实,一个恶意的网站可以通过创建一个发向起始网站的请求(例如,用黑客网站上的<img src=””/>来链向起始网站的URL)来做攻击。该请求是用用户的浏览器做的,用了用户的认证凭据。攻击者希望用户的认证或会话cookie还是有效的,如果是这样的话,攻击者有时可以采取破坏性的行动。你可以在这里了解该黑客技术的细节。

ASP.NET MVC RC现在包括了一些内置的防范CSRF攻击的辅助方法,可以有助于减轻CSRF攻击。例如,你现在可以使用Html.AntiForgeryToken()辅助方法,在表单中生成一个隐藏的input记号:

这个辅助方法会发出一个HTTP cookie,在我们的表单中生成一个隐藏的输入元素。恶意的网站不能同时获取这2个值。

然后我们可以在我们想要保护的任何action方法上施加一个新的 [ValidateAntiForgeryToken]特性:

这会检查合适的记号的存在,如果不匹配的话,会阻止我们的HTTP-POST action方法的运行(减小了成功的CSRF攻击的机会)。

File处理方面的改进

ASP.NET MVC RC版包含了若干个文件处理方面的改进:

FileResult 和 File() 辅助方法

RC版添加了一个新的FileResult类,可被用来表示一个文件将作为一个控制器action方法的ActionResult而返回。 Controller基类现在还包含了一套File()方法,可以方便创建和返回FileResult。

例如,让我们假设我们想要建造一个相片管理网站,我们可以象下面这样定义一个简单的Photo类,在其中封装了要保存的相片的细节:

然后,我们可以象下面这样使用新的File()辅助方法,在PhotoManager控制器中实现一个DisplayPhoto action方法,用来显示数据库中的相片。在下面的代码中,我们把要显示的字节,以及文件的 mime类型传给了File()辅助方法,如果我们将 <img src=””/> 元素指向我们的action方法的话,浏览器就会在页面中显示对应的相片:

假如我们想要终端用户能够下载相片,并保存在本地的话,我们可以象下面这样实现一个DownloadPhoto action方法。在下面的代码中,我们传入了第三个参数,该参数将导致ASP.NET MVC设置一个头信息,使得浏览器显示一个“保存为。。”的对话框,在其中预先填充我们提供的文件名:

当用户点击指向/PhotoManager/DowloadPhoto/1232 URL的链接时,会提示保存是否要相片:

文件上传的支持

RC版中还包括了对上传文件以及多部分mime内容的内置的模型绑定器支持。

例如,我们可以有这样一个<form>,其enctype属性被设置为“multipart/form-data”,会向/PhotoManager/UploadPhoto URL提交表单。如果表单中有一个<input type=”file” name=”fileToUpload”/>元素,可由终端用户选择一个文件,这个文件会作为HttpPostedFileBase对象传给我们的action方法:

然后我们可以使用HttpPostedFileBase对象来访问上传文件的原始字节,它的mime类型,以及将其保存到数据库中或硬盘上。

AJAX方面的改进

The ASP.NET MVC RC 版包括了若干个AJAX方面的改进:

jQuery Intellisense 文件包括在ASP.NET MVC项目模板中了

新创建的 ASP.NET MVC 项目现在包括了标准的jQuery库文件(同时包括完整的和压缩的版本),以及vsdoc intellisense文档文件,该文件会被Visual Studio用来提供更丰富的intellisense支持(你可以在这里了解有关详情):

这可以在客户端代码块和JavaScript文件中促成丰富的jQuery JavaScript intellisense:

今天的RC版本发布的是jQuery 1.2.6,我们计划在 ASP.NET MVC 1.0 最终版中发布即将发行的jQuery 1.3.1,同时会包括一个相应的JavaScript intellisense文件的更新版。

Request.IsAjaxRequest Property属性

Request.IsAjaxRequest属性可以用来检测某个请求是否来自客户端的AJAX调用 (这在AJAX功能没有启用,你需要优雅地降级的场景下会非常有用)。在RC版本中,这个方法中的逻辑已被更改为可以识别“X-Requested-With” 这个HTTP头信息(除了由ASP.NET AJAX发送的表单域值外)。这是个众所周知的头信息,为诸多JavaScript库(象Prototype, jQuery, 和 Dojo)所发送,这促成了一种统一的方式来在ASP.NET MVC请求中检测是否是AJAX调用。

JavaScriptResult ActionResult 和 JavaScript() 辅助方法

Controller这个基类现在含有一个JavaScript()辅助方法,它返回一个新的ActionResult,其类型为JavaScriptResult。这支持了这样的功能: 从服务器端返回原始的JavaScript脚本,之后为内置的ASP.NET MVC辅助方法在客户端运行。这在你想要根据服务器端的逻辑在客户端执行条件性的JavaScript的情形下会非常有用。

结语

我们非常兴奋,我们处在了ASP.NET MVC V1版本的最后冲刺阶段。请尽快地报告你在RC版中发现的任何问题,这样我们就可以在最终版中解决这些问题。开发团队计划在下几个星期内仔细地监听任何反馈,假定没有任何大的问题的话,将在下个月发布正式的V1版本。

希望本文对你有所帮助,

Scott

posted on 2009-02-03 13:06:19 by scottgu  评论(0) 阅读(9566)

 
2009年01月20日

【原文地址】Silverlight and the 2009 Presidential Inauguration
【原文发表日期】 Monday, January 19, 2009 12:21 PM

明天的Barack Obama总统就职典礼将是个名副其实的历史性活动。

Silverlight将被作为一项促成性技术,为好几个网站所用,允许我们中间无法去现场的人在线共享体验。

总统就职典礼委员会(Presidential Inaugural Committee)

总统就职典礼委员会将和iStreamPlanet公司合作,在总统就职典礼委员会(Presidential Inaugural Committee)官方网站,www.pic2009.org上,提供就职典礼活动的现场直播。上星期六,该委员会发布了第一个现场录像,转播了当选总统Obama坐火车从费城到华盛顿DC的活动。正式的总统就职宣誓仪式,演讲以及庆祝活动将在一月二十日(星期二)在线现场直播。

 

你可以在这里阅读有关总统就职典礼委员会的情况。

CNN和MSNBC将使用Photosynth

CNN和MSNBC将同时启用Photosynth浏览器,以帮助捕捉总统宣誓观礼活动的体验。他们将把专业摄影师拍的照片和观礼群众上传的照片合成,使用Silverlight内置的DeepZoom(纵深缩放)功能提供一个精妙绝伦的3D视图,以创造一个可交互的庆祝活动的Photosynth体验。

请去 CNNMSNBC的网页,观看在观礼群众上传照片后的几个小时,当选总统举手宣誓,以及其间发生的一切。

你可以在Photosynth团队这里的博客上了解有关Photosynth和Silverlight的详情。

这个星期将成为一段激动人心的历史,希望你有机会通过Silverlight来享受其体验!

Scott

posted on 2009-01-20 07:51:43 by scottgu  评论(1) 阅读(8057)

 
2008年12月20日

【原文地址】ASP.NET MVC Design Gallery and Upcoming View Improvements with the ASP.NET MVC Release Candidate
【原文发表日期】 Friday, December 19, 2008 12:44 AM

今天我们在www.asp.net网站上推出了一个新的ASP.NET MVC 设计陈列室。这个设计陈列室里陈列了你可以下载和轻易使用在你的ASP.NET MVC应用中的免费HTML设计模板。每个设计模板中包括了一个Site.master文件,一个CSS样式表文件,也许还有一套图片,用户控件,以及支持它们的辅助方法等。

 陈列室允许你在线预览每个设计,以及下载一个你可以解出和集成进你的网站的模板.zip版本。该陈列室允许任何人在创作共用许可(creative commons license)下创建和提交新的设计。访客可以对它们进行投票,提供反馈。最受欢迎的设计会在陈列室的顶部显示。

我们认为这会给开发人员提供一个很有用的方式来更轻松地创建有吸引力的,与标准兼容的网站。希望还能鼓励大家创建和共享可轻易为他人重用的设计。

即将推出的最终版候选版本中的View方面的改进

说到UI这个话题,我想我也应该与大家分享即将推出的ASP.NET MVC最终版候选版本(Release Candidate,简称RC)中的一些与视图有关的改进的细节。除了缺陷修补外,RC版本还融合了若干个特定于视图的新功能和来自社区的建议。

不需要后台代码文件的视图

基于许多人的反馈,我们决定做一个变动,这样MVC视图文件在默认情形下不再拥有后台代码文件。这个变动有助于强化视图在MVC世界中的目的(视图意在纯粹的显示,不该包含任何与显示无关的代码),去掉项目中没被使用的文件(对大多数人来说):

在ASP.NET MVC Beta版本中,开发人员可以通过在视图中的Inherits(继承)属性上使用泛型的CLR句法来除去后台代码文件,但这个CLR句法,说得轻一点的话,非常难以发现而且非常难用。ASP.NET MVC开发团队结合了ASP.NET中现有的几个扩展性功能,将在ASP.NET RC版本中,在Inherits属性中提供一个标准VB/C#语言句法:

不使用后台代码文件的另一个好处是,在你将视图文件加到项目中时,你会马上得到intellisense。在Beta版本中,你需要在创建视图后做一次编译才能在其中得到代码intellisense。RC版本将使得添加和立刻编辑视图的流程免去了编译之累,变得更加紧凑。

视图的顶级Model属性

在ASP.NET MVC的早期版本中,你使用ViewData.Model属性来访问传给视图的强类型的模型对象:

上面的句法还是可用的,虽然现在ViewPage上还有一个顶级的Model属性可为你所用:

这个属性的作用跟先前的代码例子是一样的,它主要的好处在于它允许你编写的代码更加简明。

HTML/AJAX辅助对象现在允许表达式句法

有一个不少人都提出的要求是,在使用视图的HTML和AJAX辅助对象时,在指称Model时使用强类型表达式的句法(而不是字符串)的能力。

在ASP.NET MVC Beta版本中,这是不可能的,因为HtmlHelper和AjaxHelper辅助类并没有在它们的签名中呈示模型的类型,所以大家需要建造直接基于ViewPage<TModel>基类的辅助方法才能达成这个目的。ASP.NET MVC RC 版本引进了新的HtmlHelper<TModel>和 AjaxHelper<TModel> 类型,是在ViewPage<TModel> 基类上呈示的。这些类型现在允许任何人建造使用了表达式句法的强类型HTML和AJAX辅助扩展来指称View的模型。

例如,我可以使用下面的代码建造一个(非常简单的)强类型TextBox辅助方法:

然后可以这样,在我的任意一个视图中,用它来绑定一个Product模型对象:

Visual Studio将在源代码编辑器中操作View的模型时,以这种方式对强类型的表达式句法提供完整的intellisense:

 

注:核心ASP.NET MVC V1程序集中的HTML辅助扩展还将使用现有的句法(不是基于表达式的),我们正计划在MVCFutures程序集中加入基于表达式的版本。当然,你还可以使用字符串或者强类型的表达式,来添加你自己的辅助方法。所有这些内置的辅助方法都是可以去掉的(因为他们是扩展方法),如果你要用自己的版本来替换或覆盖它们的话。

Scaffolding支持

ASP.NET MVC RC版本还包括了在Visual Studio中使用新的ASP.NET MVC "Add View"命令创建视图时的自动的"UI scaffolding" 支持。这个scaffolding支持将允许针对任何.NET 类型或对象的自动的视图生成,意味着它对POCO类,LINQ to SQL, LINQ to Entities, NHibernate, SubSonic, LLBLGen Pro,或者任何其他对象模型都工作。Scaffolding引擎使用了反射来获取View的模型类型的公开接口,然后将它们传给scaffolding模板,在生成的视图中填充基于它的合适HTML标识。

例如,假定我们有一个ProductsController类,想创建一个它的"Edit" action,来显示特定产品的编辑视图。使用RC版本,我们可以象这样,在我们的"Edit" action方法中右击,选择"Add View"上下文菜单命令:

然后在"Add View" 对话框中,我们可以表示我们将把Product类型传给我们的View:

我们可以表示我们要创建一个"Empty" 视图模板(象上面那样),或者表示我们要VS针对我们提供的Product对象自动提供一个"Edit"表单视图的基本架子:

如果我们选择"Edit" 模板, VS会自动为我们生成一个文件,该文件含有合适的HTML和验证辅助方法来生成一个可编辑的表单视图:

然后我们可以运行应用,马上得到一个编辑界面:

然后我们可以进去,将生成的edit.aspx文件做任意改动。

我们发布的scaffolding系统的一个非常棒的东西是,它是使用Visual Studio的内置T4代码生成系统实现的(Scott Hanselman在这里有一篇非常好的相关博客)。随ASP.NET MVC发布的"List(列表)", "Edit(编辑)", "Create(创建)" and "Details(细节)" 模板可以做完全定制,或者用你自己的T4模板做替换(或者从ASP.NET MVC设计陈列室下载)。所以,如果你自己有特别的方式生成HTML的话,或者想要使用自定义的HTML辅助类(譬如,基于强类型表达式的辅助类),那你可以更新默认的模板,然后scaffolding系统之后就会使用它们。

我们计划允许模板可以在整个机器的层次,以及每个项目的层次上被置换(这样,你可以在源码控制中签入特定于应用的scaffolding模板,在团队成员间共享)。

编辑视图的MSBuild任务

在默认情形下,当你编译ASP.NET MVC项目时,它会编译项目中除了视图文件中代码以外的所有代码。在ASP.NET MVC Beta中,你想要编译视图的话,你需要编写你自己的 MSBuild任务。ASP.NET MVC RC版本现在包含了一个内置的 MSBuild 任务,你可以用它来将视图包括成为项目编译过程的一部分。它会核实应用中所有视图和母版页的句法和行内代码,如果遇到问题的话,它会给你编译错误信息。

但因为性能的缘故,我们不建议在开发期间运行它来做快速编译,但将它加到特定的编译配置(例如,staging和部署)或者在与 Build 或 CI (连续集成)服务器一起使用时是非常方便的。

即将推出的ASP.NET M