Mr.“IronRuby” John Lam 在他的博客上登出了三篇贴子,其内容是他在MIX08大会上做的讲座的文字版
Microsoft Silverlight and Dynamic Languages
http://visitmix.com/blogs/2008Sessions/T28/
讲座录像的MP4版: http://msstudios.vo.llnwd.net/o21/mix08/08_MP4s/T28.mp4 (57.6MB)
讲座录像的WMV版: http://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/T28.wmv (84.1MB)
演示代码可以在这里下载:
http://dynamicsilverlight.net/
在第一篇《Dynamic Silverlight Part 1: Hello, World! in Dynamic Silverlight 》中,主要介绍随Silverlight 2 Beta 1一起发布的Chiron.exe命令行工具。这个工具有2大主要功能,一是可以帮你把应用的文件,资源,程序集等转换压制成.xap文件,二是提供一个简单的web服务器的功能,让你使用文件系统就能开发Silverlight应用。由于Chiron是动态生成.xap文件的,你对文件做变动后,只要刷新浏览器就可以获得新的.xap文件,不用重启Chiron或浏览器,提供了很好的交互开发体验。
在第二篇《Dynamic Silverlight Part 2: Managed JScript and flickr 》中,示范了如何使用托管的JScript (与我们在浏览器中的客户端Javascript不同) 与Flickr API做交互,让用户查询相关主题的照片,并将照片显示在Silverlight中。还演示了在Silverlight中,原封不动地使用Peter Norvig(AI大师)用Python编写的Spelling Corrector (拼写纠错器),提示用户输入的主题可能有错。
在第三篇《Dynamic Silverlight Part 3: Integrating Silverlight with ASP.NET MVC 》中,示范了如何与ASP.NET MVC应用做集成。通过Chiron生成.xap文件,用IronRuby在客户端动态生成WPF元素,使用WebClient与服务器端做交互等。
【原文地址】Programming Silverlight with Dynamic Languages
介绍 这个快速入门例程展示了如何创建使用了托管代码和动态语言的基于微软的Silverlight的应用,以及如何在Visual Studio 2008中调试应用。
Visual Studio 2008之Siverlight工具Beta 1版本包含了动态语言运行时(DLR)和三门动态语言(IronPython, IronRuby, 和托管JScript)的快照。Visual Studio 2008目前还不提供动态语言的项目模板,但你可以使用Chiron.exe 工具来建造,运行和调试你的应用。
DLR和动态语言目前在Codeplex网站 ,尚处于开发之中。你可以在那里找到有关的详细信息,包括新的版本,源代码,和另外的Silverlight例程 。新的版本会经常地发布出来。
本文讨论了下述主题:
软件要求 (可从 Silverlight下载网站 获取):
用动态语言创建基于Silverlight的应用 一个使用动态语言的基于Silverlight的简单应用包括下列组成部分:
根目录的HTML或.aspx文件,作为浏览器的入口点
app.xaml文件,定义了你的基于Siliverlight应用的用户界面
app.py, app.rb, 或app.jsx 文件,内含在运行时处理事件的动态语言代码。对动态语言来说,这个文件是不被编译成一个程序集的,动态语言的代码是在运行时在客户端计算机上编译和执行的
注 动态语言引擎和DLR程序集是包含在由Chiron.exe 生成的.xap 文件中,并下载到客户端计算机的。你不需要在你的项目中包含它们。
使用动态语言创建和运行基于Silverlight的应用 为你的应用创建一个文件夹.
In the application folder, create two folders named app and assets . Use the assets folder for bitmaps and additional XAML files.在应用的文件夹中,创建2个子文件夹,分别名为app和 assets。用assets存放位图和另外的XAML文件。
注 如果你想使用silverlight.js来在应用启动时做更大的控制,assets文件夹是存放silverlight.js的好所在。本例程中的应用不使用silverlight.js。你的应用不必局限于这个简单的文件夹结构。这只是一个可为Chiron.exe所用,不用指定任何特别参数的基本的结构。你的应用程序可以访问任意复杂的文件夹结构,可以包含任意数目的动态语言代码文件。
在app文件夹中,创建app.xaml。这个文件包含你的应用的根可视元素。一个简单的基于UserControl的app.xaml文件看上去也许会象这样:
<UserControl
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="System.Windows.Controls.UserControl"
x:Name="Page"
>
<TextBlock x:Name="TextBlock1" TextWrapping="Wrap"
Foreground="Black" Text="Click Me." />
</UserControl>
将根可视元素基于UserControl是推荐的做法,使用本文一开始的“查看源码”按钮看一下另外一个app.xaml的例子。
在app 文件夹中,创建一个动态语言源码文件,内含你的应用代码。下面的代码展示了一个响应鼠标按钮事件的非常简单的应用。
jsx
Import("System.Windows.*");
Import("System.Windows.Controls.*");
xaml = Application.Current.LoadRootVisual(new UserControl(), 'app.xaml')
xaml.TextBlock1.MouseLeftButtonUp += function (sender, args) {
sender.FontSize *= 2
}
py
from System.Windows import Application
from System.Windows.Controls import UserControl
def OnClick (sender, args):
sender.FontSize *= 2
scene = Application.Current.LoadRootVisual(UserControl(), 'app.xaml')
scene.TextBlock1.MouseLeftButtonUp += OnClick
rb
include System::Windows
include System::Windows::Controls
scene = Application.current.load_root_visual UserControl.new, 'app.xaml'
scene.find_name('TextBlock1').mouse_left_button_up do |sender, args|
sender.font_size = sender.font_size * 2
end
代码调用了LoadRootVisual(DependencyObject, Uri)方法,来设置一个根可视对象,你必须提供一个正确类型的对象,DLR会确保调用了正确的重载方法,并且提供所需的代码上下文。
使用本文一开始的“查看源码”按钮,得到一个定义了App类的更复杂的例子。
注
在随Visual Studio 2008之Silverlight工具Beta 1版本发布的IronRuby版本中,对每个给定的事件(例如MouseLeftButtonUp)只能连接一个事件处理函数。关于语言开发和更新版的详情,请参考Codeplex网站 。
在你的应用文件中,创建一个HTML页面来启动你的应用。使用“查询源码”按钮,拷贝为所有三门语言所用的Default.html文件。如果你遵循了本步骤中的命名约定,不做任何改动,你就可以使用这个Default.html文件。
Default.html 中最重要的一行是指定了app.xap 文件的这一行,该文件包含你的源代码和DLR程序集。
<object data="data:application/x-silverlight,"
type="application/x-silverlight-2-b1"
width="100%" height="100%">
<param name="source" value="app.xap"/>
Default.html还有另外的特性,包括在你调试你的应用时,一个用以显示错误信息的<div>。
如果你以前没用过Chiron.exe ,将它的路径加到路径环境变量中。
Chiron.exe位于SDK安装的Tools文件夹之中。如果你使用了默认的安装路径,这个文件夹在\Program Files\Microsoft SDKs\Silverlight\v2.0\Tools。
要运行你的应用,使用命令行窗口,以/browser (/b)选项运行Chiron.exe。从应用文件中运行Chiron.exe。
Chiron.exe 将你的应用文件夹中的内容提供给浏览器。
注
在默认情形下,Chiron.exe使用“app”作为包含你的入口代码的文件夹,你可以使用/directory (/d)来改变这个默认选项。
Chiron.exe 会一直在命令行窗口中运行,显示状态消息。
在浏览器中,点击Default.html来运行应用。
Chiron.exe 会按需生成.xap文件。你的Silverlight的应用就会打开,点击其中的文字就会增加字体大小。将浏览器开着。
为表示.xap文件确实是按需生成的,编辑源码文件。改动增加字体大小的那行代码,将它变成减小透明度:
jsx
py
rb
sender.opacity = sender.opacity / 2
在浏览器中,刷新网页。
Default.html请求app.xap,Chiron.exe会生成一个新的app.xap文件。应用会重启,点击控件,注意文字的透明度现在会减小。 你可以使用这个技术反复编辑和测试你的应用,而不用重启Chiron.exe。在后面的一个步骤中,你将看到在用Visual Studio调试时,如何进行同类的迭代开发。
关闭浏览器。
在命令行窗口中,按CTRL+C中止Chiron.exe。
创建一个.xap部署文件
要部署你的应用,你必须创建一个.xap文件,内含你的动态语言源码,manifest,XAML,以及象位图,语言编辑器,和DLR程序集等资源。Chiron.exe能做此功能。
创建.xap文件
使用命令行窗口,使用 /directory (/d) 和 /zipdlr (/z)选项运行Chiron.exe。从应用的文件夹中运行Chiron.exe ,就象你在开发和测试应用时做的那样。
/directory 选项指定了包含应用入口点的目录,而/zipdlr 选项指定了.xap文件的名称。对在上面开发的应用,所用的命令看上去象这样:
Chiron.exe /directory:app /zipdlr:app.xap
把Copy Default.html和app.xap拷贝到想要的地点去。
注
Chiron.exe有个命令行帮助,列出了所有的选项,或者你也可以在Chiron.exe同个文件夹中的Readme.txt文件中找到列出的这些选项。Readme.txt 文件还包含了如何配置Chiron.exe 来使用其他动态语言的信息。
访问类库
要编写基于Silverlight的应用,你需要访问Silverlight类库,加上任何你想用的其他基于Silverlight的类库。在默认情形下,DLR提供了对下列程序集的引用:
对这些程序集,你可以略过添加程序集引用的步骤。你还可以访问DLR程序集,Microsoft.Scripting.dll 和 Microsoft.Scripting.Silverlight.dll。你不用导入Microsoft.Scripting.Silverlight 命名空间。
从IronPython中访问基于Silverlight的类库
使用import语句装载 clr模块
使用clr.AddReference函数装载程序集,使它们的内容可作import之用
clr.AddReference("MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089")
使用import语句,向当前的上下文添加命名空间或装载模板。 你必须在使用命名空间前先将它们导入
import System.Windows
import System
import MyPythonModule
使用from … import语句将一个命名空间或模板的内容加到当前上下文
from System.Windows import *
from System.Windows.Controls import UserControl*
从托管JScript中访问基于Silverlight的类库
使用AddReference 函数装载程序集,使它们的内容可作导入之用
AddReference("MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089")
使用Import函数把命名空间导入到当前上下文,你必须在使用命名空间前先将它们导入
Import("System.Windows")
Import("System")
使用Import函数将一个命名空间的内容导入到当前上下文
Import("System.Windows.*")
Import("System.*")
注
除了搞乱全局上下文外,加入System中的所有类型还会把托管JScript的Array类型替换成System.Array,你也可以导入特定的类型。
使用ImportAlias函数以别名将一个命名空间或类型导入到当前上下文中
SW = ImportAlias("System.Windows")
使用LoadModule和 LoadModuleFromFile函数装载模板,这些方法返回装载的模板,LoadModuleFromFile的 第二个参数指定了模板的类型,"js" 或 "py"
util = LoadModule("MyUtilities")
util = LoadModuleFromFile("MyUtilities", "py")
从IronRuby中访问基于Silverlight的类库
使用require语句装载程序集,使它们的内容可作包含之用
使用include 语句将命名空间加到当前上下文
使用Chiron.exe和Visual Studio调试基于Silverlight的应用
在Visual Studio 2008之Silverlight工具Beta 1版本中,你可以使用Visual Studio 2008来调试用了动态语言的基于Silverlight应用。你的基于 Silverlight的应用必须下载到浏览器里才能运行,调试器必须在代码下载后才能启动。你可以在调试外改动你的代码,重新装载代码而不用重新连接浏览器进程。
调试动态语言应用
把你要调试的动态语言文件装载进Visual Studio,设置断点
从应用文件夹中,以/browser (/b)选项运行Chiron.exe,将目录内容提供给浏览器
在浏览器中,点击Default.html启动应用
Chiron.exe会按需生成.xap文件,应用的启动代码将运行
在Visual Studio中,在Debug菜单上,点击 Attach to Process(连接到进程)
因为你的应用是在浏览器中运行的,你必须连接到浏览器进程中才能调试
在Attach to Process对话框中,在 Available Processes列表中,在 Process一列,点击选择适当的浏览器实例
如果你有打开着的其他的浏览器实例,给Default.html一个标题,使之可从Title一列中易于识别
点击Attach .
转到浏览器,点击F5刷新Default.html
你的应用将在调试器中重新装载,你现在就可以开始调试了。你在起始代码中设置的任何断点就会在应用重新装载时触发。
重要注意事项
你必须在连接打调试器之后,刷新页面,重载你的应用。如果你没有先刷新页面,就开始与你的应用做交互,你的断点一个也不会被触发的。
使用第二个 Visual Studio实例或另一个编辑器,对你的代码做改动,然后将其保存。
你不能在连接到浏览器进程的Visual Studio实例中对代码做改动。【译注:好像是可以的】
在浏览器中,刷新你的HTML页面
Chiron.exe会生成一个新的.xap文件,你的应用的起始代码会运行。如果你在起始代码中有断点,它们就会被触发。
Visual Studio会告诉你源码文件被作了改动,询问是否要重新装载。点击Yes,重新装载文件,继续你的Visual Studio调试会话。
注 如果你在另外的编辑器里保存你的改动时,你的Visual Studio调试会话正处于一个断点在单步调试进代码时,你无法转换到浏览器。而是转到你的Visual Studio调试会话,你会被询问是否要重新装载源码文件。然后你必须刷新浏览器。
你可以继承在调试和改动代码之间转换,而不用中止浏览器或Chiron.exe。
调试完毕后,脱离进程。关闭浏览器,使用CTRL+C 中止Chiron.exe。
调试特性的状况
包含在Visual Studio 2008之Silverlight工具Beta 1版本中的 DLR和动态语言快照支持大多数的调试特性。例如,你可以使用F10和F11跳过或步入代码。使用 Locals 窗口查看变量数值,以及在Immediate窗口中设置变量数值或执行代码。
注
在IronPython中,但你使用F10,超过函数的结尾,控制返回到浏览器时,Visual Studio 2008会显示一个对话框告诉你没有可用的源代码。点击OK关闭对话框,然后点击F5继续。
一些语言中的支持会比另外一些语言中的好。调试支持将会随语言的开发继续扩充。欲知最新的信息,请访问Codeplex网站 。
已经可以直接观看或下载了:
http://sessions.visitmix.com/
Luciano Evaristo Guerche先生在博客里列出了一些录像的直接链接:
Mix 2008, 65 presentations so far (WMV direct links)http://weblogs.asp.net/guerchele/archive/2008/03/07/mix-2008-65-presentations-so-far-wmv-direct-links.aspx
跟Silverlight有关的录像,
Keynote I (第一天的主题演讲) Dean Hachamovitch, Ray Ozzie, Scott Guthriehttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/KYN0801.wmv Building AOL's High Performance, Enterprise Wide Mail Application With Silverlight 2 Eric Hoffman, Marc Katchay, Stefan Galhttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/BT01.wmv
Building Rich Internet Applications Using Microsoft Silverlight 2, Part 1 Joe Stegman, Mike Harsh http://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/CT01.wmv Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2 Joe Stegman, Mike Harsh http://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/CT02.wmv Creating Rich, Dynamic User Interfaces with Silverlight 2 Karen Corby http://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/T20.wmv Encoding Video for Microsoft Silverlight Ben Waggonerhttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/BCT07.wmv Exploring Moonlight: Novell's Implementation of Silverlight on Linux Miguel de Icaza http://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/T31.wmv From Flash to Silverlight: A Rosetta Stone Rick Barazzahttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/T30.wmv Integrating Media in Silverlight Applications Ed Maiahttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/BCT05.wmv Internationalizing XAML Applications in Windows Presentation Foundation and Microsoft Silverlight Ken Azuma, Laurence Moroney, Ted Kitamura http://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/T15.wmv Mobile Devices and Microsoft Silverlight: A Primer on the New Technology Amit Chopra, David Klinehttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/T12.wmv Real World Design: Working with Silverlight and WPF in the Design Studio Beau Ambur, Chip Aubry, Chris Bernard, Nathan Dunlap, Rich Westonhttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/PNL16.wmv Silverlight and Advertising Eric Schmidthttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/BT06.wmv Silverlight as a Gaming Platform Joel Neubeck, Scott McAndrew http://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/CT03.wmv The Business of Microsoft Silverlight Danny Riddellhttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/B01.wmv Using Microsoft Silverlight for Creating Rich Mobile User Experiences Giorgio Sardohttp://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/C02.wmv Working with Data and Web Services in Microsoft Silverlight 2 Eugene Osovetsky http://msstudios.vo.llnwd.net/o21/mix08/08_WMVs/T13.wmv
IE8带来了一堆改进和新功能,这些改进包括CSS 2.1 兼容,开发者工具,更好的AJAX开发支持等,详见
How do I make my site 'light up' with Internet Explorer 8?
http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/DevelopersNew.htm
比较关心的是涉及AJAX开发的,更为详细的文档在这里
Better AJAX Development
http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ie8whitepapers&ReleaseId=581
这些改进包括:
1.AJAX导航支持(前进,倒退按钮工作了!)
2.DOM储存(简洁的API,每个域可在本地保存10M的数据)
3.网络连接事件(online以及offline事件,还可以通过window.navigator.onLine来监测连接状态)
4.把per host的并发连接数从2增加到6
5.XMLHTTPRequest改进,包括添置了timeout属性,以及ontimeout事件,以允许开发人员中止请求
更为激动人心的是对跨域请求(XDomainRequest-XDR)的支持!不再需要通过同源服务器来作为代理服务器,只要异域返回 XDomainRequestAllowed=1的header就可以(譬如通过Response.AppendHeader("XDomainRequestAllowed","1") ):
// 1. Create XDR object
xdr = new XDomainRequest();
// 2. Open connection with server using POST method.
xdr.open("POST", "http://www.contoso.com/xdr.txt")
// 3. Send string data to server.
xdr.send("data to be processed")
以前曾在博客里谈到如何通过URL的hash来在来自不同域的网页之间通讯,绝对是比较丑陋的方案:
http://blog.joycode.com/saucer/archive/2006/10/03/84572.aspx
IE8现在支持跨文件消息通讯(Cross-Document Messaging-XDM)!通过onmessage事件和postMessage方法,两个来自不同域的网页可以进行通讯:
窗口A:(来自contoso.com)
// 1. Create event handler for message event.
<document.onmessage = HandleMsg()>
// 2. Post message to a secure page B.
window.postMessage("Hello world", "https://lucernepublishing.com")
窗口B:(来自lucernepublishing.com)
// 3. Create event handler for message event.
<document.onmessage = HandleMsg()>
// 4. Create event object off window.
var e = window.event
// 5. Check domain on received event to ensure the message
// comes from the expected domain.
if (e.domain = "contoso.com")
if (e.scheme = "HTTPS")
// 6. Retrieve data from event.
var data = e.data
// 7. Send return message to Page A.
e.source.postMessage("Hello")
在www.infoq.com上看到了这篇文章,推荐一下 The Future of MonoRail in the Wake of MS MVChttp://www.infoq.com/news/2007/11/mr-ms-mvc
该文的中文版将于明天推出,留意一下这个链接:http://www.infoq.com/cn/news/2007/11/mr-ms-mvc
下面是这篇文章的概要:
上个星期,Castle项目的创始人Hamilton Verissimo与MS MVC开发团队讨论了如何把Castle/MonoRail集成进MS MVC的方法,以及向他们通报了Castle团队从现实应用中得到的所有的复杂和违反直观的需求,向他们提出了该如何处理这些需求的建议。
他编写了一些集成例程,作为MS MVC的可扩展性和插拔性的概念验证(proof-of-concept)。他说,他实现了IParameterBinder的初始支持,实现了NVelocity View Factory支持,实现了REST支持和集成了Castle的DataBinder和ActiveRecordDataBinder。他发现了一些他想要实现却实现不了的东西,譬如重用MonoRail的helpers(因为这些东西和MonoRail的内核耦合太强了),建立Brail View Factory(同样的理由),建立视图工厂的选图器(会影响可测试性)。
总的来说,他对MS MVC框架的做法非常满意,但他也指出,.NET社区对即将发布的MS MVC框架CTP版本别抱太高的期望。他说,因为你将看到的是个非常小的框架,要在实战中有用还需要做很多东西,第一个CTP版的发布主要是为了获得用户的反馈,之后的版本将会非常棒。
关于Castle MonoRail的将来,Hamilton说要看到MS MVC框架的最终版和它包括的功能集之后才能决定,他说,他要求MS MVC框架应该试着支持MonoRail支持的所有的东西,但不确定MS MVC团队是否会那么做。MonoRail 2.0将取决于MS MVC框架的实现。如果MS MVC框架的最终版非常棒,提供了众多的功能,他会放弃MonoRail 2.0。但如果MS MVC框架的最终版很明显地缺少什么东西,那么MonoRail 2.0可以重用MS MVC框架提供的基础设施,提供一些非常棒的扩展。
Eleutian Technology的Aaron Jensen 同意Hamilton的观点,他说,他希望MonoRail变得更像Rails一样,建立于MS MVC之上,进一步推广“约定胜于配置(Convention over Configuration)”的概念,包括提供生成器等,将MonoRail推向更高的水平,成为.NET web 平台上社区真正需要的框架。
其他人指出了MonoRail的routing功能的缺陷,他们说,在RoR和MS MVC中,Routing是一等公民,而在MonoRail中的Routing好像是个事后加上去的东西。为什么Routing是否是一等竟是那么重要?因为, 1) 有助于遵守DRY(别重复自己)原则,routing引擎和URL生成之间的紧密集成允许对URL进行轻松和安全的重构;2)提高可测试性,在MonoRail中对route的测试,需要做end-to-end的集成测试。如果routing是一等的类对象,那么就可以对它们做隔离测试。
Hamilton对routing问题已经有了解决方案,他开发了一个新的MonoRail routing引擎,可以在MonoRail SVN上下载。
Ben Scheirman在他的一篇博客 中则讨论了相关的微软技术和开源技术的问题,结论是,System.Web.MVC能够达到的使用者是MonoRail达不到的,因为很多企业都使用微软技术,而且在这空间工作的开发人员也不在少数。
在MVC中,服务器端的行为是由进来的URL控制的,譬如,在Scott Guthrie的博客 中示范的/Products/Categories URL,会调用ProductsController的Categories方法, 该方法从数据库里获取数据,然后它通过RenderView调用某个视图(示范中是“Categories”视图),把数据传给视图,该视图会根据传入的数据生成HTML,返回给用户。
如果是个添加、更改数据的操作,譬如添加一个分类,那么你大概会有类似这样的表单(譬如来自“CategoryInfo”视图):
<form method="post" action="/Products/AddCategory"> <input type="text" name="Category.Name"> ... <input type="submit" name="btnAdd" value="submit"> </form>
在用户提交表单时,系统会调用ProductsController的AddCategory方法,根据AddCategory的签名,系统会自动填充生成Category对象所需的数据或者你需要从Request对象中手工获取数据,更新数据库完毕之后,你可以通过转向等方式返回到/Products/Categories。
在这2个例子(/Products/Categories和/Products/AddCategory)中,我们有一个控制器ProductsController,和2个视图(“Categories”和“CategoryInfo”)。视图只用作显示HTML之用,所有的应用逻辑都在ProductsController中。
在目前的WebForm做法中,你大概会有2个网页Categories.aspx和AddCategory.aspx。常见的做法是,在Categories.aspx的Page_Load或其他事件中,你大概会调用某个服务对象或Presenter对象获取数据,然后根据数据生成HTML。对于AddCategory.aspx,在用户提交表单后,postback返回当前页面,系统会调用按钮点击的处理函数,然后你大概会在该函数里收集数据,调用某个服务对象或Presenter对象更新数据库,然后转向到Categories.aspx。在这个做法中,系统是根据从表单返回的Request.Form数据(ViewState,以及在Request.Form存在类似btnAdd=submit这样的数据)来决定调用那个方法的(因为一个页面上可以有保存按钮,删除按钮等等),控制是在页面层次,跟Products有关的应用逻辑散居于多个页面的后台代码中(你也许可以使用MVP这样的模式,把控制的逻辑集中到Presenter里去,但这改变不了最初的控制来自页面这个事实,而且一般情形下,一个Presenter大多只跟一个页面有关联)。
有个同事问我,那么WebForm中的AutoPostback=true的DropDownList该如何在MVC中实现呢?在WebForm中,如果一个DropDownList设置了AutoPostback=true,用户改变选择时,表单会自动postback,ASP.NET会对该DropDownList的ViewState里保存的数据和该DropDownList返回的值做比较,然后触发DropDownList的SelectedIndexChanged事件。。。在MVC中,你大概可以这么做
<select name="category" onchange="this.form.action='/Products/ChangeCategory';this.form.submit();"> ... </select>
在表单自动提交后,MVC会调用ProductsController的ChangeCategory方法,该方法会根据情况做些操作,调用视图等等。如果这个选项改动需要更新当前页面的某个局部,那么onchange也许可以调用某个AJAX方法,只传回必要的数据到服务器,而ProductsController的ChangeCategory方法可以返回要做的HTML变化等。
【来源:Tim Sneath 】 如果你在学习Silverlight或者想建造一个录像网站,那么Tim Sneath推荐的 这个刚刚在CodePlex上发布的项目,Video.Show ,是个非常有参考价值的项目。这个项目使用了微软最新的技术和产品,.NET Framework 3.5, ASP.NET AJAX, LINQ, Silverlight, Expression Encoder 和 Silverlight Streaming等。它提供了录像上传,编码,添加tag,观看和评论录像的功能,下面是一些该项目的特性:
1.用以浏览录像的录像墙,把鼠标移到录像图标上面可以预览录像 2.基于时间标记的评论系统,可以把录像暂停在某个有趣的时刻,添加评论,这些评论在回放时就会出现 3.使用ASP.NET的网站成员功能,用来登录,生成自定义的用户信息,添加书签和tag,上传录像等 4.针对没安装Silverlight的用户的初次体验,示范了检测和安装Silverlight的最佳实践 5.使用Web服务实现索取录像目录,以及tag和书签等功能 6.使用Expression Encoder对录像进行编码以及上传到Silverlight Streaming等后台批处理任务
该项目是以源码的形式,在Microsoft Public License 许可下发布的,你完全可以使用这些源码推出你自己的录像网站。
Scott Hanselman在博客上强调 1. ASP.NET MVC框架不是 Web Forms 4.0,而是提供一个选项,好比汽车和摩托车,到达目的地可以用多种工具,每种工具都有其长项和短处,但别削足适履 2. ASP.NET MVC框架将成为System.Web.Mvc, 将与ASP.NET的子系统相兼容,这意味着你也可以在其中使用或滥用Session, Cache, Personalization, Roles, Membership等 3. ASP.NET MVC框架的扩展性会很好,可以使用Castle Windsor作为它的IoC容器,可以用NHibernate做持久,Brail做视图等
他同时提供了他在DevConnections做的MVC示范的源码(可惜没有跟MVC相关的DLL),可以在他的博客上 下载。
有人抱怨,自ASP.NET AJAX 1.0发布以来,ASP.NET AJAX的进展好像不是很大,Joe Stagner 指出在ASP.NET 3.5和Visual Studio 2008中,
1. ASP.NET AJAX不再是单独的附加产品,而是集成进了ASP.NET 2. Visual Studio 2008对JavaScript提供完全的和动态的Intellisense支持 3. Visual Studio 2008提供对JavaScript的调试支持,你可以加断点,使用Watch, Immediates, Call Stack等窗口 4. WCF 支持JSON, RSS, 和 POX,意味着你可以使用AJAX 调用WCF服务 5. AJAX 控件工具包已多达34个控件 6. ASP.NET提供64个ASP.NET AJAX “How Do I”录像
另外ASP.NET Futures方面, 1. ASP.NET Futures提供对Safari浏览器的历史的支持,包括在客户端对历史的支持 2. ASP.NET Futures的CSS Selectors APIs 与W3C推荐相兼容 3. ASP.NET Futures的脚本资源分离器允许你将程序集中内嵌的资源脚本转换成单独的脚本文件
另外,如果你想参与,ASP.NET控件工具包项目是开源的,具体细节参考Joe Stagner的博客 :
You can contribute to the ASP.NET AJAX Control Toolkithttp://weblogs.asp.net/joestagner/archive/2007/11/09/you-can-contribute-to-the-asp-net-ajax-control-toolkit.aspx
在 Mike Henderson 的博客上看到这个一览表(他建议你按顺序安装):
1. IIS5.1 (XP) / IIS6 (Server 2003) / IIS7 (Vista) - 你也可使用Visual Studio中内置的Cassini 服务器
2. Visual Studio 2005
Service Pack 1 for Visual Studio 2005Vista update for VS2005 (如果你在使用Vista做开发的话)
3. Visual Studio 2008, Beta 2
4. Windows Update - 确认你安装了所有的近期更新
5. AJAX策略更新 - 这确保你在VS2005里建造基于AJAX的应用时不会导致程序集依赖于VS2008/.NET 3.5
6. Silverlight 1.0运行时
7. Silverlight 1.0 SDK
8. Silverlight 1.1 Alpha Refresh 运行时
9. Silverlight 1.1 Alpha Refresh SDK (2007年9月更新版)
10. Silverlight Tools for Visual Studio 2008 Beta 2
11. * .NET 3.0 SDK (不是一定需要,但如果要做.NET 3.0 开发,一定需要,而且里面包括了一个可以做快速原型开发的工具:XamlPad)。
12. Expression Blend 2 九月更新版 (不是一定需要,但设计Silverlight内容时极其有用)
13. ASP.NET Ajax Extensions 1.0
14. ASP.NET Futures (包含基于ASP.NET的Silverlight控件)
全部下载的话,要下载7.6个小时!同时,你也许需要下列工具:Expression Media Encoder Silverlight Quickstarts ASP.NET AJAX Controls Windows Server 2008 RC0 SDK
至此,如果你还没发晕的话。。。就让我们开始Silverlight开发吧!
根据Jeffrey Palermo ,在刚举行的ALT.NET大会上,Scott Guthrie 对他的团队正在开发的MVC框架做了示范,预计在今年年底推出CTP版本。其中将包括:
内在支持控制器的TDD模型 提供ASPX (不带viewstate或postback)作为视图引擎 提供了可为其他视图引擎(譬如MonoRail的)所用的hook 对控制器依赖注入的控制反转(IoC)容器的支持 提供对URL和导航的完全控制 整个过程的插拔式支持 关注分离 与ASP.NET的良好集成 同时支持静态和动态语言 具体细节参考Jeffrey Palermo这里的博客贴子 。
Popfly 的宗旨是给非专业人员提供一个软件开发工具, 根据Popfly网站 ,
http://www.popfly.ms/Overview/
Popfly可以让大家轻松建造和共享mashups,gadgets, 网页和应用。 Popfly 由两部分组成:
1。 Popfly Creator 是一套建造网页和mashup的在线视觉化工具 2。 Popfly Space 是个在线creators社区,用户可以存放和共享自己的作品,评论和修改其他用户的作品
Popfly提供了一堆预制/连接好的web服务/编程模块可为用户所用,它支持JavaScript/AJAX,Popfly还提供了与Visual Studio的集成 。
Channel 9 有个采访开发团队和开发人员示范的录像http://channel9.msdn.com/showpost.aspx?postid=308460
Adam Natham提供了一个screencast录像链接,进一步展示了Popfly的功能http://go.microsoft.com/fwlink/?LinkID=91175
该项目目前还处于alpha测试阶段,还没有向大众开放。