/ ASP.NET

Microsoft Web Camps Shanghai

WebCamps

Microsoft在中国的第一次Web Camps。当然并不是M$的Web Camps有多吸引我,主要是冲着Scott Hanselman去的,希望能从他那听到一些有趣的MVC,MEF的系统应用。不过,毕竟这是一场免费的show,市场推广的成分比较重,内容还是相当初级的。因此,我会挑一些我觉得稍微有趣的内容。(PPT

Web Platform

起初我以为就是一个帮助你安装IIS,VS,.Net Framework之类的工具而已,M$似乎做的更进一步。在Web Platform里,有一些开源的项目,可以简单的通过按一个按钮来帮助你deploy这些开源项目,Web Platform帮你处理了这些项目的依赖,如数据库,IIS等安装配置。以后装一些php,ASP.NET的开源项目会方便许多。

Visual Studio 2010

这也许是这次Web Camps推广的重点之一。我看到比较能让我眼前一亮的功能就是IntelliTrace。这东东有点像一个Log功能,只是做的更实时,更多的与代码的交互。

IntelliTrace2

如图所示,当你在调试的时候,IntelliTrace告诉你,现在这个程序做了些什么,如ASP.NET的请求,ADO提交的SQL等等,记录的信息有很多方面:

Category Description and Collected Data
ADO.NET Events around executing queries against SQL, the executed command as well as the connection string.
ASP.NET Events around the ASP.NET pipeline as well as request processing and redirection.
Console Console output.
Data Binding Windows Forms data binding.
Environment Variables Evaluation and retrieval of environment variables from the process.
File Creation, deletion and access of files.
Gestures User actions performed against common controls from Web forms, Windows Forms and WPF. In addition to collecting data about the interaction with the control, clicking on one of these events automatically redirects you to the appropriate event handler.
Lazy Initialization Initialization of lazily loaded variables.
Registry Creation, deletion and querying of registry information.
Service Model Web service calls from WCF.
Threading Queuing of user work items and parallel computing tasks.
Tracing Debugger trace output and assertions.
User Prompt Display of Windows Forms and WPF message boxes as well as the result of the dialog.
Workflow Activity instantiation and completion.
XML XML file loading.
现在有更多的信息帮你决定在哪去下断点调试,甚至更多线程的信息

IntelliTrace1

这倒是个方便的功能。也许在开发WebForm时,还可以方便的知道现在page处在哪个stage,比如Init,Load,Prerender等。

另外还有些VS2010的tips:

  • 一个类似Resharper中的查找功能,快捷键“Ctrl+,” 搜索“terms”,包括类,symbols等
  • 新的Quick Fix快捷键:以前是Alt+Shift+F10,太复杂。现在直接Ctrl+.即可。
Dynamic Data

这个东东我总在VS中看到,却从来没有用过,今天大概知道这个项目的作用。用Scott的话来说,就是在做项目的时候,总会为administrator做一些Boring coding,以方便他们录入或查询数据等,简单的说就是CRUD。Global.asax.cs中简单的一行代码就可以实现:

DefaultModel.RegisterContext(typeof(KingOfPopEntities), new ContextConfiguration() { ScaffoldAllTables = true });

ASP.NET MVC

Scott做的是非常基础的MVC介绍,不过我依然从中听到些有趣的信息。

  • <%:…%>这个标记我倒是第一次注意。它和<%=…%>类似,而且还提供了HTML Encoding,可以将数据中类似<script>…</script>这样的hack代码进行编码。
  • Routing Debugger这是个有趣的工具,可以知道当前URL匹配哪个Route规则。只需下载这个assembly,解压到bin目录下。然后在Global.asax中Application_Start方法加一行
    protected void Application_Start(object sender, EventArgs e)
    {
      RegisterRoutes(RouteTable.Routes);
      RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
    }
  • MVC 2新特性 -- 新的Html Helper方法:EditorFor,LabelFor等,支持Lambda表达式,如:
    Html.EditorFor(model => model.PhoneNumber)
  • MVC 2新特性 -- Data Annotations 可以用来提供Entity的数据注释,如Validation信息,用于Label显示的字符串等,从而将Validation等信息隔离在Model层。
    [MetaDataType(typeof(Activity_metadata))]
    public partial class Activity
    {
    	public class ActivityMetaData
    	{
    		[Required("Phone Number is required")]
    		[DisplayName("Phone Number")]
    		[UIHint("Phone Number")]
    		public string PhoneNumber;
    	}
    

    }


    另外,我一直以为MVC自带的validation只支持服务端验证,其实它是两者都支持的。用HtmlHelper.EnableClientValidation就可以开启客户端验证。而且服务端和客户端都可以Customized,可以参考ASP.NET MVC 2 Custom Validation
MEF

Entity Framework讲的内容很简单,就一个最简单的应用。但是我发现了一个非常有趣的细节,就是EF在生成Entity类代码时,你指定一个Entity Name后,它会用Entity Name的复数形式生成一个Entity Set的名字。有趣的是它不是简单的在单词尾加s而已。比如Entity Name设为Man,Entity Set就自动命名为Men;甚至设Entity Name为Person,Entity Set名字居然是People!

jQuery

  • VS2010对javascript智能感知做了改进,当然jQuery的支持更好了。不知是VS2010才改的,还是以前就这样,VS对javascript智能感知的支持,是当你输入javascript代码时,VS会不停的执行javascript来获得当前的上下文。比如,即使你用如下代码声明变量,VS依然可以智能感知:
    for(var i=0;i<10;++i){
    	window["foo" + i] = "Test";
    }
    此时,你依然可以通过智能感知得到foo1,foo2···foo10
  • 当你使用Html Helper(如Html.EditorFor)生成一个输入框,如何拿到它的Dom Id呢?答案是   ViewData.TemplateInfo.GetFullHtmlFieldId(···)
  • Scott在Demo过程中使用了一个Client Template。它使用如下代码定义template
    使用如下代码绑定模板
    $("#template").render(data).appendTo("ul");
    另外,微软似乎提议将John Resig的JavaScript Micro-Templating加入到jQuery中。
这估计是我最实时的一篇Blog了,在会场即时写的,有点记者的感觉了,呵呵。
Jackson Zhang

Jackson Zhang

Odd-e敏捷教练,主要涉及组织,团队,产品,技术,工程实践等,曾为多家知名企业提供教练与培训服务。译有《用户故事与敏捷方法》,《.NET单元测试的艺术》和《实例化需求说明》。擅长工程实践(如测试驱动开发,单元测试,重构,持续集成等),产品探索(Impact Mapping,Pretotyping,Lean Startup等)与团队协作。zbcjackson AT gmail.com

Read More