RSS 2.0 Feed

Wednesday, May 07, 2008

【原文地址】Professional ASP.NET 3.5 Book (only $16 on Amazon for a short time)
【原文发表日期】 Tuesday, May 06, 2008 1:38 AM

我喜欢跟踪的一件事情是Amazon.com的图书销售情况,它对监测开发人员任何一天感兴趣的东西提供了一个非常有用的数据点。我使用www.TitleZ.com网站(是用ASP.NET建造的)来跟踪我想要监测的特定书目,然后它就会生成一个亚马逊网上书店实时销售排行数据的报告,以及七天,三十天,和九十天的销售排行平均数据。

今天早晨,我打开我的报告,看到了列表前面常见的那些书目,正要离开时,我注意到列表最前面,由Bill Evjen,Scott Hanselman和Devin Rader合著的《Professional ASP.NET 3.5: In C# and VB》一书让人眼花缭乱的亚马逊排名,它的亚马逊销售排名为惊人的第95名(亚马逊网上书店所有书中),这意味着它的销售量超过了哈利-波特(这对任何技术书来说,简直是闻所未闻的)。

后来发现亚马逊正在短期内对几本书进行特价促销,这本书是其中一本。该书原价为54美元,短期内你只要支付价格低得有点荒唐的16.49美元就可以买到。我不知道这个促销活动会持续多久,但如果你正在找一本优秀的ASP.NET 3.5图书的话,你也许应该占一下便宜:

这是本优秀的ASP.NET 3.5书目,出色的end to end资源。自三月份出版以来,就一直高居编程类畅销书排行榜上(所有编程类书中排列前5名),好评如潮(几个星期前我曾在亚马逊上写过评语,给了它5星)。

如果你想买一本好的ASP.NET的书的话,你也许应该考虑在亚马逊结束促销前买下该书(如果在你读到本文前书价有所改变的话,我预表歉意)。

希望本文对你有所帮助,

Scott

P.S. 附注: 如果你正在找别的.NET 3.5和VS 2008好书的话,我还推荐 《C# 3.0 In a Nutshell》,《LINQ in Action》,和《Pro LINQ: Language Integrated Query in C# 2008》 (这些书在亚马逊上都是5星)。

【更新】 Tuesday, May 06, 2008 2:22 PM by ScottGu

看上去,书价刚回涨到27美元(但还是五折)。

目前该书在亚马逊*所有*东西的销售中排行第五,我怀疑他们提价,是因为它在排行榜上跃升太快,卖得比他们原先计划的还要好得过了点,:-)。

下面是还在列表上的其他几本书:

C# 2008: www.amazon.com/.../002-5242737-1614454

VB 2008: www.amazon.com/.../002-5242737-1614454

标签: ,

posted @ | Feedback (0) | Filed Under [ ASP.NET .NET ]

Wednesday, April 30, 2008

【原文地址】April 28th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC, Silverlight
【原文发表日期】 Monday, April 28, 2008 10:35 PM

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

ASP.NET

  • Displaying the Number of Active Users on an ASP.NET Site: Scott Mitchell继续他关于ASP.NET 成员,角色,和用户信息支持的精彩系列。在这篇文章里,他讨论了如何使用ASP.NET 成员功能来估算和显示目前正访问网站的在线用户的数目。

  • ASP.NET Dynamic Data Update: ASP.NET开发团队上个星期发布了新的ASP.NET动态数据功能的更新版。这个更新版加了若干新功能,包括 更干净的URL支持 (使用了ASP.NET MVC所用的同个URL路径选择功能),以及更棒的确认,外键以及模板支持。

ASP.NET AJAX

  • ASP.NET AJAX UI Templates: ASP.NET开发团队的Nikhil Kothari有一篇很酷的贴子,展示了他目前正开发的一个原型(prototype),它促成了很干净的界面的客户端AJAX模板化。

ASP.NET MVC

  • Inversion of Control, ASP.NET MVC and Unit Testing: Fredrik Kalseth有一篇很酷的文章,讨论控制反转(IOC)后面的概念,以及如何将其用于ASP.NET MVC,来更好地孤立依赖性,以及促成对你的代码更好的单元测试。

  • Testing Action Results with ASP.NET MVC: Jeremy Skinner 在博客里讨论了他加到MvcContrib中的一些很酷的辅助性扩展方法,以促成对Controller action方法做称心满意的测试。

Silverlight

  • Silverlight - the Song: Spike Xavier和Dan Wahlin 又发表了一首独一无二的歌曲,《Silverlight之歌》,:-)

希望本文对你有所帮助,

Scott

posted @ | Feedback (2) | Filed Under [ ASP.NET Atlas Silverlight Link Listing MVC ]

Tuesday, April 29, 2008

【原文地址】Slides from my ASP.NET Connections Orlando Talks
【原文发表日期】 Sunday, April 27, 2008 9:51 PM

上星期,我在奥兰多举行的ASP.NET Connections 大会上做了演讲。星期一我做了一个主题演讲,那天稍后,我还做了2个分会场讲座。你可以在下面下载我的讲义和示范例程:

主题演讲

我主题演讲的讲义可以在这里下载。

在演讲中,我示范了如何调试 .NET 框架源码。你可以在这里了解如何在VS 2008中做配置。

我还示范了如何使用新的ASP.NET动态数据支持来建造网站,你可以在这里了解有关ASP.NET动态数据的详情。我还示范了如何使用新的ASP.NET MVC框架,你可以在这里了解有关ASP.NET MVC的详情。

我还展示了使用Silverlight 2建造的新Hard Rock Memorabilia网站。你自己可以在这里把玩一下Hard Rock应用,你可以在我这里的链接网页了解到Silverlight的详情(中文版)。

使用Silverlight建造.NET 应用

Silverlight分会场讲座的讲义和示范例程可以在这里下载。

你可以在我这里的链接网页(中文版)上了解到有关Silverlight的详情。特别地,我建议你阅读一下我这里这里的教程贴子。

ASP.NET MVC

我的ASP.NET MVC讲座的讲义和示范例程可以在这里下载。

你可以在这里了解到最新的 ASP.NET MVC源码更新版的详情。 Stephen Walther 刚在这里贴出了一套他在大会后做的ASP.NET MVC讲座的讲义和示范例程,非常之棒。

希望本文对你有所帮助,

Scott

posted @ | Feedback (0) | Filed Under [ ASP.NET .NET Talks Silverlight MVC ]

Friday, April 18, 2008

【原文地址】ASP.NET MVC Source Refresh Preview
【原文发表日期】 Wednesday, April 16, 2008 9:56 PM

最近我们开启了一个新的ASP.NET CodePlex 项目,我们将用它来提供将要发布的ASP.NET特性的预览(以及可编译的源代码)。

上个月,我们用它发布了ASP.NET MVC源码的第一个投放,这个投放包括了我们在MIX上发布的ASP.NET MVC第二个预览版的源码,以及允许你修补和编译的Visual Studio项目文件。

几小时前,我们在该网站上发布了ASP.NET MVC源码的一个更新版。这个源码更新版 不是正式的ASP.NET MVC新的预览版,而是一个过渡性的版本,旨在对源码树的当前状态提供一个样本。我们将在几个星期内完成一些工作后发布正式的“ASP.NET MVC第三个预览版”,这些工作包括新的特性以及对现有的特性的加工,更好的VS工具集成,VS Express版本的支持,以及文档等。如果你想要一个毫无麻烦的ASP.NET MVC安装版,带有文档以及完整的工具支持的话,你也许要等到这个正式的预览版出来后再说。如果你想要有机会看一下早期的“预览版的预览”,马上有机会开始使用一些特性,并且对它们提供反馈的话,那么今天的源码更新版值得一看。

这个ASP.NET MVC源码更新版中的一些改进

这个星期的更新版(你可以在这里下载)包括了对ASP.NET MVC的若干改进。这些改进包括:

  • 除了发布ASP.NET MVC框架的源码外,我们还发布了我们用来测试该框架的单元测试的源码,这些测试是使用MSTest以及开源的Moq mocking 框架实现的。内含一个单元测试的VS 2008项目文件,方便你在本地的VS 2008 IDE中编译和运行。

  • 对测试Controller类的的显著简化了的支持,你现在可以不用mock任何对象就可以单元测试常见的Controller场景(详情见下文)。

  • URL路径选择系统的几个新特性和可用性方面的改进(详情见下文)。

创建新的ASP.NET MVC项目

在下载MVC源码,在本地编译后,你可以建造你自己的ASP.NET MVC程序集,或者你也可以下载一个VS模板包,得到这些程序集的预制版本,其中包括一个 Visual Studio的项目模板,你可以用它来快速建造使用了最新代码的新ASP.NET MVC项目。

在安装ASP.NET MVC源码更新 .VSI 模板后,一个新的“ASP.NET MVC应用”项目模板会出现在你的“新项目”对话框的“我的模板”部分:

这个新的“我的模板”版本的MVC项目模板可以与先前的ASP.NET MVC第二个预览版并行存在,你可以在上面的对话框的主要项目模板部分看到。这允许你在同一个机器上安全地创建新项目,同时使用最新的源码版本和上个正式预览版。

在你使用这个更新的ASP.NET MVC项目模板创建一个新项目时,在默认情形下,你将得到一个如下图所示的项目:

这个项目方案在“\Controllers”目录下包含一个Controller(“HomeController”),在“\Views\Home”子目录下包含2个视图模板(“About”和“Index”)。 2个视图模板都基于网站的共同母版页(“Site.master”),这些文件的样式定义于“\Content”目录下的“Site.css”文件中。

在你运行应用时,内置的web服务器会自动启动,你将看到网站的首页内容:

点击“About us”条,就会显示“About”内容:

项目中的“HomeController”类负责处理上面2个URL,有下述2个action方法:

默认的“Site.master”模板会在ViewData集合中寻找一个“Title”值,用它来显示HTML页面的<title>元素,默认的“Index”视图模板会找一个“Message”,用它来显示首页的欢迎消息,很明显,你可以进去定制这些文件。

这个ASP.NET MVC投放版的Controller变动

如果你在认真阅读上面的代码的话,你也许注意到了用这个新的ASP.NET MVC源码更新版默认实现的Controller类中的几个变动。

在ASP.NET MVC第二个预览版中,上面的HomeController action方法是象这样实现的:

MVC功能开发团队在这个星期的投放版中正在试验几个想法,还在尝试一些新的想法:

  1. Controller中的Action方法现在默认返回“ActionResult”对象(而不是void),这个ActionResult对象表示action方法的结果,如显示一个视图,重定向的URL,另一个要执行的action/路径,等等。

  2. Controller基类中的RenderView(),RedirectToAction(),和 Redirect() 辅助方法现在返回强类型的ActionResult对象(你可以对其做进一步的操作或从action方法中返回)。

  3. RenderView()辅助方法现在可以不用显式传人要显示的视图模板名称就可以调用,如果你省略模板名字的话,在默认情形下,RenderView()方法将使用action方法的名字作为要显示的视图模板的名称。所以,在“About()” action方法中,不用参数调用“RenderView()”现在跟显式调用“RenderView('About')”是一样的。

很容易将用第二个预览版建造的现有Controller类更新到使用这个新的模式(只要将void改成ActionResult,然后在任何RenderView或RedirectToAction方法调用前加一个return语句就可以了。

从Action方法中返回ActionResult对象

那么,为什么将Controller action方法改成默认返回ActionResult,而不是返回void呢?有几个流行的Web-MVC框架使用同样的返回对象的方式(包括Django, Tapestry等),我们发现它给ASP.NET MVC带来几个好处:

  1. 它促成对Controller的更干净,更方便的单元测试支持。你不再需要对Response对象或ViewEngine对象的方法进行mock就可以单元测试action方法的回复行为,你只要简单地在单元测试中使用从Action方法返回的ActionResult进行assert就可以了(见下一部分)。

  2. 它可以在那些取决于某种条件会有2不同结果的场景中,使得Controller逻辑流的意图更清晰,更明确(例如,如果条件A为真,就重新定向,否则显示一个视图模板)。这可以使得不简单的控制器action方法的代码易读,好懂些。

  3. 它能促成一些非常棒的组合场景,在这些场景中,FilterActionAttribute可以将action方法的结果,在执行之前进行修改、转换。例如,ProductCatalog控制器的“Browse”方法也许会返回一个RenderActionResult,表示它要显示产品的“List”视图,在控制器类上声明的FilterActionAttribute然后就有机会取决于客户端能接受的MIME类型,将要显示的特定“List”视图模板定制为List-html.aspx或List-xml.aspx。多个FilterActionAttribute还可以链在一起,把结果从一个传给另一个。

  4. 它还为开发人员(包括我们自己)提供了很好的扩展性机制,以在将来添加额外的功能。可以通过从ActionResult基类继承,覆盖其中的“ExecuteResult”方法来轻易地创建新的ActionResult 类型。例如,可以很轻易地创建一个“RenderFile()”辅助方法,编写action方法的开发人员可以调用它来返回新的“FileActionResult”对象。

  5. 它在将来还将允许一些很棒的异步执行场景。Action方法可以返回一个AsyncActionResult对象,表示它们在等待网络操作,想要放弃当前的工作线程,这样ASP.NET可以用它来执行另一个请求,直到网络调用结束为止。这会允许开发人员避免阻塞服务器上的线程,支持非常有效和可扩缩的代码。

这个过渡性预览版的一个目标是给大家一个机会把玩一下这个新方法,用它来建造现实的应用,从中学习一下。

我们还将发布一个可为你所用的另外的Controller基类的样例,如果你还是喜欢以前的“void” action返回值方式的话。但在这个源码更新版中,我们故意没有包括这个另外的Controller基类,因为我们想要鼓励大家尝试一下“ActionResult”返回方式,给我们一些用它来建造应用的反馈。

如何单元测试Controller Action方法

我在上面提到,新的ActionResult方法可以极大地简化对控制器的单元测试,且避免在常见场景中使用mocking,让我们通过一个实战例子来示范一下。

考虑下面这个简单的NumberController类:

这个Controller类有一个“IsEvenNumber” action方法,接受一个数字作为URL参数。IsEvenNumber action方法先检查该数字是否是负数,如果是,就把用户重新定向到出错网页。如果是正数的话,它会决定该数字是偶还是奇,然后调用一个视图模板来显示适当的消息:

对我们的“IsEvenNumber” action方法编写单元测试非常容易,多亏新的ActionResult方法。

下面是一个单元测试例子,核实在提供负数时,正确的Http重新定向发生了(例如,/Number/IsEvenNumber/-1):

注意上面,我们不用mock任何对象就可以测试我们的action方法。我们只是生成了一个NumberController类的实例,直接调用action方法(传人一个负数),然后将返回值赋给一个本地“result”变量。上面我用了C#的“as type”语法,将“result”变量转换成一个强类型的“HttpRedirectResult”类型。

C#的 “as” 关键词的一个好处是,如果转换失败的话,它会赋null值,而不是抛出异常(例如,如果action方法返回的是个RenderViewResult)。这意味着,我可以轻松地在我的测试中加一个assertion检查,核实结果不是null,以核实Http重新定向确实发生了。然后我可以加第二个assertion检查,以核实指定了正确的重新定向URL。

测试非零数字的场景也很容易,要做的话,我们将创建2个测试方法,一个测试偶数,另一个测试奇数。在这2个测试中,我们将断言返回了RenderViewResult,然后核实在与视图相关的ViewData中传进了正确的“Message”字符串:

然后我们可以在VS 2008中右击我们的NumberControllerTest类,选择“运行测试”菜单项:

这会在内存中执行我们的三个单元测试(不需要web服务器),报告我们的NumberController.IsEvenNumber() action方法是否执行了正确的行为:

注: 在这个星期的源码投放中,你还需要使用mocking来测试Controller的TempData属性。我们的计划是在几个星期后的ASP.NET MVC第三个预览版中不再需要mocking就可以测试这个属性。

MapRoute辅助方法

ASP.NET MVC应用中的URL路径选择规则一般是在Global.asax类的“RegisterRoutes”方法中声明的。

在ASP.NET MVC第一个预览版和第二个预览版中, 路径是通过直接生成一个Route对象,将其连接到一个MvcRouteHandler类,然后设置其上的适当属性来声明路径规则,再加到routes集合的:

上面的代码以后还会继续工作,但是,你现在还可以利用新的“MapRoute”辅助方法,它提供了极其简单的句法,但能做同样的事。下面是在你创建一个新的ASP.NET MVC项目时,默认配置的基于约定的URL路径(代替上面的代码):

MapRoute()辅助方法是重载了的,可以接受2,3,或4个参数(路径名字,URL句法,URL默认参数,URL参数正则表达式约束)。

你可以调用MapRoute()多次, 在系统中注册多个具名的路径。例如,除了默认的约定规则外,我们可以象下面一样加一个名为“Products-Browse”的路径规则:

然后我们可以在Controllers和Views中明确地引用这个“Products-Browse”规则,如果我们要生成一个针对它的URL的话。例如,我们可以在视图模板中使用象下面这样的代码,使用Html.RouteLink这个视图辅助方法,来表示我们要链接到“Products-Browse”路径上,同时给它传一个“Food”分类参数:

这个视图辅助方法然后就会访问路径选择系统,输出象下面这样的适当的HTML超链接URL(注意它是如何自动地使用路径规则将分类参数置换到URL中去的):

注: 在这个星期的源码投放中,你需要向Html.RouteLink()辅助方法中传人控制器和action参数(除了分类参数外)来生成正确的路径URL。几个星期后的ASP.NET MVC第三个预览版将不再要求这样,而是允许你象我上面写的Html.RouteLink调用那样,来确定路径。

其他URL路径映射功能

这个星期的MVC源码投放还支持一堆新的URL路径映射功能,你现在可以在你的路径规则中包含"-", ".", ";" 或任何其他你想要作为URL的一部分的字符。

例如,使用"-" 分割符你现在可以使用象下面这样的规则从你的URL中分别分析出language和locale值:

这会调用时,将合适的"language", "locale", 和 "category"参数传人ProductsController.Browse action方法中:

URL路径规则 URL例子 传给Action方法的参数
{language}-{locale}/products/browse/{category} /en-us/products/browse/food language=en, locale=us, category=food
  /en-uk/products/browse/food language=en, locale=uk, category=food

或者你可以使用URL后面的 "." 文件扩展类型来决定是要以XML还是HTML格式来显示内容:

这会在调用时将"category" 和 "format"参数传给ProductsController.Browse Action方法:

URL路径规则 URL例子 传给Action方法的参数
products/browse/{category}.{format} /products/browse/food.xml category=food, format=xml
  /products/browse/food.html category=food, format=html

ASP.NET MVC第二个预览版引进了通配符路径规则,例如,你可以在一个规则中表示,把所有剩下的URI内容作为一个具名的参数传给一个action方法:

这会在调用时,将一个"contentUrl" 参数传给WikiController.DisplayPage action方法:

URL路径规则 URL例子 传给Action方法的参数
Wiki/Pages/{*contentUrl} /Wiki/Pages/People/Scott contentUrl="People/Scott"
  /Wiki/Pages/Countries/UK contentUrl="Countries/UK"

这些通配符路径在本星期发布的预览更新版中还会照常工作,在你建造博客,维基,CMS,或其他基于内容的系统时,这些规则非常值得一看。

注意,除了在ASP.NET MVC场景中使用新的路径系统外,我们现在还将在ASP.NET动态数据(使用了ASP.NET Web Forms)中使用同样的路径系统。

结语

希望上面的内容对本星期的ASP.NET MVC源码更新版中的一些新功能和变动提供了简短的说明。

你现在可以在这里下载,如果你想要马上开始使用它的话。或者,你也可以等上几个星期,等正式的 ASP.NET MVC第三个预览版发布,这正式的版本将拥有更多的功能(也会融入大家对本星期的版本的反馈),提供更加无缝的安装程序,提供很好的VS集成,提供更新的文档。

对本星期的ASP.NET MVC更新版有什么问题的话,一定要去www.asp.net上的ASP.NET MVC论坛询问。

希望本文对你有所帮助,

Scott

标签: , ,

posted @ | Feedback (0) |

Saturday, April 12, 2008

【原文地址】April 11th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC, Visual Studio, Silverlight
【原文发表日期】 Friday, April 11, 2008 12:04 AM

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

ASP.NET

  • 50 Useful CSS Tips and Tricks: 一个非常有用的网页,提供了一个你可在常见web场景中使用的各种CSS技巧,诀窍和工具的列表。

ASP.NET AJAX

  • Accessible UpdatePanel: ASP.NET开发团队的Bertrand Le Roy的一篇文章,描述了如何使得ASP.NET AJAX的UpdatePanel控件可为屏幕阅读器所用。

  • Building ASP.NET AJAX Components: Mike Ormond 撰写了一个分成8个部分的精彩系列,讨论如何建造可在客户端和服务器端使用的可重用的ASP.NET AJAX组件。

ASP.NET MVC

  • ASP.NET MVC: Membership Starter Kit: Troy Goode建造了一个极棒的可用于ASP.NET MVC的membership starter kit,提供了在网站上认证用户的注册和登录页面,以及允许管理员创建、管理用户和角色的一套管理功能。可在这里下载。

  • How to Enable Pretty URLs with ASP.NET MVC and IIS6: James Geurts贴出了一篇很有用的文章,描述了如何在IIS6上启用对ASP.NET MVC的无扩展URL。(注:在IIS7 上你不用配置什么特别的就可以启用对ASP.NET MVC的无扩展URL支持)。

Visual Studio

Silverlight

  • Silverlight 2 Map / DataGrid Tutorial: Jason Zander有一个精彩的二部分Silverlight教程,示范了如何建造数据驱动的应用,结合了地图控件和datagrid来过滤和分析数据。

希望本文对你有所帮助,

Scott

posted @ | Feedback (0) | Filed Under [ ASP.NET .NET Visual Studio Silverlight Link Listing MVC ]

Friday, April 11, 2008

【原文地址】ASP.NET Dynamic Data Preview Available
【原文发表日期】Thursday, April 10, 2008 12:44 AM

几个月前,我们推出了ASP.NET 3.5 Extensions的预览版,该版本内含一堆今年稍后会发布的新特性(包括ASP.NET AJAX方面的改进,ASP.NET MVC,ASP.NET Silverlight支持,以及ASP.NET动态数据)。

该预览版中的ASP.NET动态数据(Dynamic Data)支持对一个很酷的新特性提供了初览,该特性允许你很快地建造使用LINQ to SQL或LINQ to Entities对象模型的数据驱动的网站。 ASP.NET动态数据允许你自动地根据你的ORM数据模型的元数据动态地生成功能完整的数据输入和报表网页。除了支持动态渲染模式外,它还允许你使用任何你想要的HTML或代码来覆盖和定制任何视图模板(给你完整的体验控制)。

ASP.NET动态数据预览

今天,我们发布了ASP.NET动态数据的更新版,你可以在这里了解相关详情和下载。

这个新的动态数据预览版现在可以与标准的内置ASP.NET数据控件(包括GridView,ListView,FormView,DetailsView等)协作了,动态数据支持允许这些控件自动地处理外键关系。例如,在一个GridView上,你现在将得到外键字段值的友好名称的自动显示,以及在编辑模式下这些值的自动下拉框选择支持:

新的动态数据支持还能根据你在数据模型类上设置的约束提供自动的UI验证支持(同时支持客户端和服务器端)。例如,如果数据库中的一个字段在大小上限于50个字符,并且被标记为不能为空,ASP.NET动态数据就会自动地将合适的UI控件校验器加到UI页上以强制这个约束。如果你在LINQ to SQL或LINQ to Entities数据模型类里改变了约束,UI就会自动地反应这些变动,并且在下一个web请求中强制新的约束。

除了标准的数据模型元数据外,你还可以声明自定义的元数据以进一步控制验证和对象界面的默认显示。

你既能在LINQ to SQL中,也能在LINQ to Entities中使用上面所有的特性。

Visual Studio动态数据项目向导(Project Wizard)

除了核心的ASP.NET动态数据运行时支持外,VS web工具开发团队今天还发布了新的动态数据项目向导的第一个预览版,该向导允许你很快地开始一个数据驱动的网站。该向导允许你选择数据库,然后选择你想用来建造 LINQ to SQL数据模型的数据表,视图和存储过程:

在创建数据模型之后,该向导允许你轻松地选择动态数据驱动的模板网页来建造界面:

然后你能选择每个网页上支持的数据插入、编辑、更新界面的类型:

在你点击“完成”之后,它会用你的数据模型类和数据界面网页配置生成一个项目。你可以在这里了解该向导的有关详情,以及观看一个实战示范的screencast。

如何入门

你可以在 这里了解这个新的动态数据预览版的详情以及下载它在本地运行。

你可以观看David Ebbo在MIX 08上做的动态数据讲座以了解其工作原理的细节。也看一下Scott Hunter这里的screencast,以及Brad Millington这里的screencast。 David这里还有一个贴子,讨论十二月份预览版与今天的预览版本之间的变动。

你可以在www.asp.net这里的论坛上问问题或提交反馈。

希望本文对你有所帮助,

Scott

标签: , , ,

posted @ | Feedback (2) | Filed Under [ ASP.NET .NET LINQ Data ]

Saturday, April 05, 2008

【原文地址】Tip/Trick: Creating and Using Silverlight and WPF User Controls
【原文发表日期】Friday, April 04, 2008 1:37 AM

Silverlight和WPF一个根本性的设计目标是允许开发人员能轻松地将UI功能封装进可重用的控件。

你可以从一个现有的Control类(Control基类或者象TextBox和Button这样的控件)继承而来,实现新的自定义控件。或者你也可以创建可重用的用户控件,可以方便地使用XAML标识文件组成一个控件的UI(因此建造起来容易之极)。

在我的Digg教程系列贴子的第六部分中,我示范了如何使用VS 2008的“添加新项”对话框创建一个新的用户控件,然后在其中定义UI。这个方法在你预先知道你想要在用户控件里封装UI时,非常有效。你还可以在Expression Blend中使用同样的技术。

将现有的UI封装成用户控件

有的时候,只有在你已经开始在父页或父控件上定义一些UI之后,你才知道你要将某些UI功能封装成可重用的用户控件。

例如,我们也许正设计一个表单,要允许用户输入运输和结帐信息。我们也许会先创建一些UI,来封装地址信息。要达成目的,我们可以往页面上加一个<border>控件,在其中内嵌一个网格布局面板(2列4行),然后往其中放置标签和文本框控件:

在仔细地布局完之后,我们也许会想到,“嗨,对结帐地址我们也要用完全一样的UI,也许我们应该创建一个可重用的地址用户控件,这样我们可以避免重复自己”。

我们可以使用“添加新项”项目模板的方式来创建一个空白的新用户控件,然后将上面的UI内容拷贝进去。

但一个可在Blend中使用的更快的诀窍是,在设计器中,选中我们要封装成用户控件的控件们,然后右击,选择“做成控件”菜单选项:

当我们选择“做成控件”菜单项时,Blend会提示我们输入要创建的新用户控件的名称:

我们将其命名为“AddressUserControl”,然后点击OK。这会导致Blend创建一个新用户控件,内含我们选中的内容:

在重新编译项目,回到原先的页面后,我们将看到跟以前一样的UI,除了地址UI现在被封装进AddressUserControl外:

我们可以将第一个AddressUserControl命名为“ShippingAddress”,然后在页面上添加该用户控件的第二个实例来记录结帐信息(我们将这第二个控件实例命名为“BillingAddress”):

现在假如我们要改变地址的外观的话,我们可以只在一个地方做改动,然后就可以将该改动同时施用到运输和结帐信息上去。

将地址对象数据绑定到AddressUserControl

至此,我们有了一些用户控件封装了了地址UI,让我们来创建一个Address数据模型类,我们可以用来数据绑定到用户控件上。我们将定义象下面这样的类(利用了新的自动属性的语言特性):

然后在我们的Page.xaml文件的后台代码文件中,我们可以生成我们的Address类的2个实例,一个为运输地址,另一个为结帐地址(为这个例程的目的,我们将在地址对象中填充伪数据)。然后我们将通过编程手段将地址对象绑定到页面上的AddressUserControl控件上去,我们这样做,把每个用户控件的“DataContext”属性设成合适的运输或结帐数据模板实例:

最后一步是用声明的方式在 AddressUserControl.xaml 文件中加一个{Binding}语句,用来配置用户控件中的TextBox控件的Text属性和绑定到用户控件上的Address数据模型对象的属性间的双向数据绑定关系。

当我们点击F5运行应用时,我们将得到Address数据模型对象与AddressUserControl的自动数据绑定:

因为我们将{Binding}声明设置成了“Mode=TwoWay”,用户在文本框中做的改动会自动地推送到Address数据模型对象中去(不用写任何代码就可实现)。

例如,我们可以将浏览器中原先的运输地址改成送到迪斯尼:

假如我们在Save按钮的Click事件处理函数中加一个断点,然后点击按钮的话,我们可以看到上面的文本框的变动是如何自动反映到我们的“_shippingAddress”数据模型对象的:

然后我们可以实现 SaveBtn_Click 事件处理函数,将运输和结帐Address数据模型对象按我们的方式持久化,而不用手工获取或对页面上的UI控件做什么操作。

WPF和Silverlight支持的这个干净的视图/模型分离使得后期改动地址用户控件极其容易,且不必更新页面中的任何代码,它还使得轻松地对功能进行单元测试成为可能(请阅读我最新的贴子了解Silverlight单元测试的详情)。

结语

WPF和Silverlight方便你将UI功能封装进控件,它们支持的用户控件机制就提供了一个非常容易的方式。用户控件与数据绑定的结合促成了一些很好的视图/模型分离场景,允许你在操作数据时编写非常干净的代码。

如果你想在自己的机器上运行的话,你可以在这里下载上面例程的完整版本。

想进一步了解Silverlight和WPF的话,请参阅我的Silverlight教程和链接网页。 我还高度推荐Karen Corby在MIX08上做的精彩讲座(讨论了用户控件,自定义控件,样式化,控件模板等),你可以在这里免费在线观看该讲座。

希望本文对你有所帮助,

Scott

posted @ | Feedback (0) | Filed Under [ .NET Visual Studio Tips and Tricks WPF Silverlight ]

Friday, April 04, 2008

【原文地址】Silverlight Tips, Tricks, Tutorials and Links Page

我将使用本页链接到有关Silverlight 2的文章和贴子(包括我写的和别人写的),请经常回来查看新的内容,因为我才开始。

入门教程

  • Silverlight 2 初览: 我建议先读这个贴子,如果你正考虑开始Silverlight 2开发的话。该文不仅对Silverlight 2提供的功能做了高层次的描述,还链接到了一个八个贴子的系列教程,该教程对如何建造一个Digg客户端例程做了示范。这些教程贴子对Silverlight 2和WPF开发的概念提供了很好的介绍。

  • Unit Testing with Silverlight 2: Silverlight开发团队的Jeff Wilcox有一篇精彩贴子,讨论如何使用Silverlight SDK中的单元测试框架单元测试Silverlight 2应用。

入门讲座

  • 我的Silverlight入门讲座: 你可以下载我最近在亚利桑那做的“Silverlight 2入门”讲座的讲义和示范例程,请随意在你自己的讲座中重用这些讲义。

文档链接

教程和例程

  • Using Deep Zoom with Silverlight 2: Jacek Ciereszko有一个很好的博客贴子,描述了如何使用Silverlight 2的 “Deep Zoom”功能实现跟Hard Rock例程类似的图像放大功能。

部署体验

控件模板

ListBox和ScrollViewer场景

DataGrid场景

  • Using Silverlight 2's DataGrid with WCF + LINQ to SQL: 这个15分钟的录像博客示范了如何在服务器上建造一个LINQ to SQL对象模型,然后用WCF将其发布,然后示范了如何建造一个使用了新的Silverlight DataGrid控件的Silverlight客户端,该客户端调用WCF服务获取LINQ to SQL数据,将其绑定到DataGrid上。

  • Simple Editing of Web Service Data in a DataGrid: Mike Taulty有一篇好贴,展示如何在服务器上建造WCF服务,然后从Silverlight 2客户端使用它来获取数据,绑定到DataGrid,允许用户更新数据行,添加/删除数据行,然后使用 Silverlight 2 Beta1将数据保存到服务器上。

  • Sorting with Silverlight 2's DataGrid Control: Silverlight 2 Beta1中的DataGrid控件还没有内置的列数据排序支持(将在Beta2中提供),但这并没有阻止Matt Berseth! 在这个贴子里,他展示了如何使用一个定制的header列方法来实现排序。也看一下Matt的 这里的贴子,该文提供了一个DataGrid测试页面,展示了目前DataGrid的若干特性。

Web Services 和 Networking

  • Web Services and Silverlight: 这个有用的贴子讨论了如何在Silverlight中使用web服务,并且提供了相关快速入门例程和文档的链接。

Video场景

Accessibility 和 508相容性

  • Accessibility in Silverlight 2: Silverlight开发团队的Mark Rideout讨论 Silverlight 2 中的accessibility支持,以及如何使用Silverlight建造与section 508相容的accessible方案。

希望本文对你有所帮助,

Scott

posted @ | Feedback (0) |

Thursday, April 03, 2008

【原文地址】Unit Testing with Silverlight
【原文发表日期】 Wednesday, April 02, 2008 2:01 AM

我们在Silverlight 2 Beta1 版本中发布的一个重要的功能是允许你进行API层次和界面层次单元测试的单元测试用具(unit test harness)。这个测试用具是跨浏览器和跨平台的,可以用来快速运行和核实自动化的单元测试:

除了发布Silverlight的这个单元测试用具外,我们还发布了用它建造的,对在Permissive License许可下发布的Silverlight控件源代码提供了自动化测试涵盖的2千个左右单元测试的源码。这个许可允许你将控件的源码进行修改,运行单元测试核实其行为,并且以任何形式重新发布这些控件。

学习如何单元测试Silverlight

Jeff Wilcox,Silverlight单元测试框架和用具的开发者,在这里发表了一篇精彩的博客贴子,讨论如何在解决方案中加一个Silverlight Unit Test项目。你可以从我上个月撰写的这篇Expression Blend教程贴子上下载他用来示范测试的聊天应用。你也可以观看Jeff录制的这个很酷的录像贴子,在其中他对该单元测试框架和我们发布的测试案例做了示范。

就象Jeff在他的贴子里展示的那样,你现在可以往你的Visual Studio解决方案中加一个“Silverlight测试项目”,该项目封装针对你正开发的应用的单元测试:

然后你可以往测试项目中添加单元测试类,来测试API或模拟Silverlight控件中的界面动作(例如模拟按钮点击等)。

然后你可以运行测试项目,执行其中的测试,来核实和汇报它们的状态。

Jeff的测试框架自动地提供基于浏览器的测试用具和报告系统(意味着你可以在任何能运行Silverlight的浏览器或OS组合上运行它):

Jeff的测试框架支持在每个测试后快速重置控件(以及避免对每个测试案例重启新的浏览器实例,这使得测试非常快)。

你可以在几秒钟内很快地突过成百上千个自动化的测试:

绿的结果意味着测试都通过了。红的结果表示某个测试案例失败了,同时记录断言失败(assertion failure)以及出现的运行时异常。

结语

如果你曾有困难采取策略对AJAX应用进行自动化的单元测试或TDD的话,我认为你会发现Silverlight提供了一些极棒的测试选项。使用Visual Studio,你还可以将测试分离到你的解决方案的另外的项目中去,你需要在你的Silverlight应用嵌入测试就可以运行它们。

除了支持上述的单元测试用具和框架外,我们还将在Silverlight 2的最终版中支持UI自动化APIs。这些API将促成accessibility的场景(允许屏幕阅读器可以用于Silverlight,以及促成Silverlight应用对Section 508的相容性)。这些UI自动化API还将促成这样的UI测试场景,你可以建造end to end的浏览器界面自动化,来模拟真正的鼠标和键盘交互,促成自动化的end to end体验的测试。这些组合应该允许你建造极其坚固和可维护的RIA方案。

希望本文对你有所帮助,

Scott

附注: 想找到有关Silverlight 2更多的教程贴子和链接的话,请参阅我的新《Silverlight 技巧,诀窍,教程和链接》 网页。

posted @ | Feedback (0) | Filed Under [ .NET Community News Silverlight ]

Saturday, March 29, 2008

【原文地址】March 28th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC, Visual Studio, Silverlight, .NET
【原文发表日期】 Friday, March 28, 2008 1:08 AM

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

ASP.NET

ASP.NET AJAX

ASP.NET MVC