关于翻译Scott Mitchell三层应用教程的事情

CSDN有网友询问合作翻译的事情,我的建议是,大家任意挑几个教程翻译,只要相互间没有冲突,不做重复工作即可,然后在自己的博客里发表,提供一个目录,相互连接,等全部翻译完毕,再想法把这些东西汇集在一起

象这样的合作翻译,最好是用Wiki,但。。。

有兴趣参与的人请跟此贴,如果可以的话,现在就用这个帖子来联系吧,以后通过MSN或翻译群联系

我刚翻译完比较长的第一篇,

在ASP.NET 2.0中操作数据::创建一个数据访问层(C#版)
http://blog.joycode.com/saucer/articles/77807.aspx

参考LoveCherry的网页查看参与者名单和翻译进度:
http://lovecherry.cnblogs.com/archive/2006/06/20/430040.html

BLINQ

BLINQ是微软ASP.NET产品组的Polita Paulus推出的一个非常有用的工具。

Microsoft Blinq Prototype
http://www.asp.net/sandbox/app_blinq.aspx?tabid=62

给BLINQ一个目标数据库,它能根据数据库里的schema自动生成分页显示,添加,更新和删除数据的网站。从网页上,你还能从一个数据实体访问另一个(数据库里)相关的数据实体……

你要写的编码行数?0!

这个工具基于LINQ技术,要使用它,你需要Visual Studio 2005和五月份的LINQ技术预览版。

下面是我的测试,具体的参数设置,参考BLINQ安装目录(X:\Program Files\Microsoft ASP.NET\Blinq)里的ReadMe.rtf文档

打开一个DOS窗口,在BLINQ安装目录执行

D:\Program Files\Microsoft ASP.NET\Blinq>blinq /t:d:\WebSites\MySite /database:pubs /vDir:MySite
WebApp created at d:\WebSites\MySite

之后,一个浏览器会自动打开,

BLINQ会为每个数据表生成3个页面,第一个页面含有一个GridView控件,列出了现有的记录,按上面的Edit/Delete连接可以在线更新/删除记录。

按View Details连接,显示一个细节页面,里面是个DetailsView控件,你可以通过它来更新/删除记录。

第三个页面是添加页面(可以通过类似上面列单下面的Create New Publisher按钮或者左边Publisher菜单上的New Publisher连接来转向),里面也有一个DetailsView控件,你可以通过它来创建新的记录。这些页面都采用了MasterPage技术,BLINQ还提供了一个基本的theme/skin。

BLINQ在App_Code目录里生成2个文件,一个文件罗列了跟数据表有关的partial实体类,另一文件, StaticMethods.cs则罗列了这些partial类的CRUD操作。页面里的那些控件则通过ObjectDataSource连接到对应类的这些CRUD操作。

BLINQ生成的东西简明易懂,无论是用BLINQ来做Prototyping,还是在新项目开始时通过BLINQ来生成一个网站应用部分的框架作为起点,然后根据需要做改动,可以省下很多功夫。

我听上去大概有点大惊小怪,因为外面生成编码的工具很多,而且这工具还有不少rough edge,譬如喜欢模板的人大概会讨厌hard-coded的生成页面的方式,对在上面列单里看到编辑titleauthors大概也会觉得有点怪。但我想在最近我在写的一个东西里使用LINQ。知道Andres Aguiar有个Build provider for DLINQ,但这玩意包装的东西太多了,我需要一个很简明的东西。BLINQ生成的东西很简明,这是我喜欢的。而且别忘了,BLINQ还只是一个prototype。

Good job, thanks, Polita!

Scott Mitchell 的ASP.NET 2.0教程

[来源:Brian Goldfarb] 微软请了Scott Mitchell撰写46个使用ASP.NET 2.0开发三层架构应用的step by step教程,着重于常见的数据访问模式,对初学者应该很有用。目前发表了10个,以后每1-2周会发表10个左右。目前发表的10个教程的内容包括:

  • 创建一个数据访问层
  • 创建一个业务逻辑层
  • Master Pages以及网站导航
  • 使用ObjectDataSource显示数据,用声明方式以及编程方式设置参数
  • 多种方式的主/从(Master/Detai)l数据显示

具体参考

Building and using a 3-tiered data architecture with ASP.NET 2.0
http://www.asp.net/learn/dataaccess/default.aspx?tabid=63

如果有需要的话,我们可以考虑将这些教程翻译成中文

Nikhil Kothari的Script#

用服务器端语言写客户端脚本已经成为趋势了

RJS允许你使用Ruby来编写客户端的脚本,Google Web Toolkit使用Java,Nikhil Kothari的Script# 允许你使用C#来写客户端的脚本:

http://www.nikhilk.net/Entry.aspx?id=121

他的Script# 编译器生成的不是IL,而是Javascript, 这可以极大地简化开发AJAX类的应用。

这个10分钟的录像里,Nikhil Kothari演示了怎么使用Visual Studio 2005和Script#做一个简单的AJAX调用,Cool!

他有一个原型可以下载:

http://www.nikhilk.net/Content/Samples/ScriptSharp.zip

 

ASP.NET 2.0中ReadOnly的TextBox

[来源:AppDev-SYSK 118] 有时候,我们不希望用户直接编辑TextBox,而是希望通过客户端脚本的方式来设置内容,一般的做法是设置TextBox的属性ReadOnly为true。但在ASP.NET 2.0里有了变化,设置了ReadOnly为true的TextBox,在服务器端不能通过Text属性获取在客户端设置的新内容,在Reflector里比较一下LoadPostData的实现

.NET 1.1中,

bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
{
      string text1 = this.Text;
      string text2 = postCollection[postDataKey];
      if (!text1.Equals(text2))
      {
            this.Text = text2;
            return true;
      }
      return false;
}

.NET 2.0中,

protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
      base.ValidateEvent(postDataKey);
      string text1 = this.Text;
      string text2 = postCollection[postDataKey];
      if (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
      {
            this.Text = text2;
            return true;
      }
      return false;
}

就可以看出,如果设置了ReadOnly为true,从客户端传回的新的值是不被设置到Text属性的。

想要保持.NET 1.*中的行为,建议的做法是设置客户端属性ContentEditable=false,参考

SYSK 118: ReadOnly or ContentEditable?
http://blogs.msdn.com/irenak/archive/2006/05/03/589085.aspx

其实如果是设置客户端属性的话,设置客户端的readonly属性应该也是可以的:

TextBox1.Attributes[“readonly”] = “true”;

VS 2005 Web Application Project V1.0发布了

[来源:Scott Guthrie]

Visual Studio 2005 Web Application Projects
http://msdn.microsoft.com/asp.net/reference/infrastructure/wap/default.aspx

VS 2005 目前支持的Web应用 template 叫网站项目模型(Web Site Project Model)。Web应用项目模型(Web Application Project Model)与网站项目模型间的区别,可以参考蝈蝈的博客或者MSDN上的文章。

VS2005将支持的两种WEB编程模型的比较(蝈蝈)
http://blog.joycode.com/ghj/archive/2006/04/17/74699.aspx

Introduction to Web Application Projects
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/WAP.asp

简而言之,Web应用项目模型是VS 2003中的web项目模型的翻版,具体来说,

  • 项目中的文件是通过一个项目文件来定义的,该项目文件也包括了程序集的引用以及其他与项目有关的信息。在项目所在文件夹里的文件,如果在项目文件中没有定义的话,并不属于这个项目
  • 编译时,所有的编码文件会被集中编译,生成一个单一的程序集,存放在bin目录里,同时IDE支持递增发布
  • 编译过程是通过MSBuild实现的,通过MSBuild的扩展规则,你可以扩展和定制编译过程

最大的好处在于,从VS 2003升级到VS 2005应该是极其容易的,具体的细节,参考Scott Guthrie的教程。

VB: http://webproject.scottgu.com/VisualBasic/Migration/Migration.aspx

C#: http://webproject.scottgu.com/CSharp/Migration/Migration.aspx

同时,VS 2005 Web Application Project的新功能包括

  • 支持VSTS的Team Build
  • 对App_GlobalResources 的Resource强类支持
  • 对定制Build Tool Action的支持
  • 对编辑/继续的支持,Scott Guthrie博客上有个示范

由于自定义Profile是动态生成的,Tim McBride发布了一个能在VS 2005 Web Application Project中编译时自动生成自定义Profile类的工具,具体参考

http://weblogs.asp.net/bradleyb/archive/2006/05/08/445727.aspx

ASP.NET 2.0中的alwaysFlowImpersonationPolicy


才读完微软ASP.NET产品组项目经理Stefan Schackow 撰写的《Professional ASP.NET 2.0 Security, Membership, and Role Management》的第二章,就觉得买书花的钱已经值了。

ASP.NET中身份的问题很复杂,我了解的知识大都来自Keith Brown的“A Tale of Three Security Contexts in ASP.NET”一文。Stefan Schackow 在第二章“Security Processing for Each Request”中,清晰地勾画出在每次请求中,特别是在与认证和授权模块相关的事件里,在不同的IIS安全设置,配置文件设置,以及是否部署在UNC共享目录里等各种情形下,当前操作系统线程的身份,IIS的身份令牌,当前托管线程的CurrentPrincipal,以及HttpContext.Current.User身份,是如何配置以及演变的。

其中特别提到了在异步操作中,身份是如何配置的,应该如何手工流动,但他指出ASP.NET 2.0 提供了把处理当前请求的操作系统线程的身份自动流动到异步线程上去的功能,只要把%WINDIR%\Microsoft.NET\Framework\v2.0.50727\aspnet.config文件中的2个节点改成

<legacyImpersonationPolicy enabled=”false“/>
<alwaysFlowImpersonationPolicy enabled=”true“/>

即可!

ASP.NET之火热

O’Reilly的创办人和CEO Tim O’Reilly在他的题为“ASP.Net on a Roll (ASP.NET 势如破竹)”的博客里说,”Based on book sales data, it looks like ASP.Net 2.0 is on fire (根据图书销量的统计数据,ASP.NET 2.0象是着了火一样)”,跟去年同期相比,跟ASP相关的图书的销量大增了53% (相比之下,JSP类的图书的销量下降了25%)。他也提到,微软与O’Reilly以及Dr. Dobb杂志合办的ASP.NET 2.0培训中心,旨在吸引PHP,JSP和Cold Fusion 开发人员。不过,由于AJAX的风起云涌,Javascript类的图书的销量增加了99%!一年前还没有Ruby on Rails,如今光一本书的市场就已经是PHP+ASP图书市场的1/6!他说,“Still, our numbers indicate a lot of enthusiasm for ASP 2.0 (但我们的统计数字表明,对ASP 2.0之热情极其高).”

.NET 点滴

0。 DotnetKicks.com – 形式类似digg.com,跟.NET有关的新闻/内容网站

http://dotnetkicks.com/

[来源: Episodes : Episode #4 – Life, the Universe, and Everything]

1。 ASP.NET 中文的教学录像

Channel9上,微软的kzhu贴了多个中文的课件,其中包括对VS2005设置文件,MasterPage, Webparts等的介绍

http://blogs.msdn.com/kzhu/default.aspx

2。 在ASP.NET 2.0中的Session状态的丢失

IE6中为减少跨站脚本攻击,引进了不让脚本使用的HttpOnly的cookie,也可能造成的效果是,通过脚本打开的窗口或使用AJAX时,因为Session cookie没有传回到服务器,造成新的Session 的生成,这就会造成不少人遇到的Session状态的丢失,下面这个blog提供了解决这个问题的一个方法

http://blogs.msdn.com/jorman/archive/2006/03/05/544119.aspx

下面这篇文章介绍了HTTP-only Cookies
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/httponly_cookies.asp

3。 微软,O’Reilly, Dr. Dobb’s杂志联合主办的ASP.NET 2.0培训中心

ASP.NET 2.0 Training Center: Cross Training for Web Developers
http://aspnet.cmp.com/

4。 Scott Mitchell的blog
http://www.scottonwriting.net/sowBlog/

Scott Mitchell以4GuysFromRolla.com为基地,写过无数ASP.NET方面的文章,让我们大家都受益非浅

这里是他在MSDN上文章的列单
http://msdn.microsoft.com/asp.net/community/authors/scottmitchell/default.aspx

5。 The Dark Side of File Uploads by Milan Negovan
http://www.aspnetresources.com/articles/dark_side_of_file_uploads.aspx

还可以更简单么?

Jesse Liberty等著的《Programming ASP.NET》一书中说,

“….One of the most significant improvements to ASP.NET 2.0 is its intuitive nature. In fact, when compared to its predecessor, ASP.NET 2.0 reduces the amount of code you have to write by about 75%. Creating interactive web applications has never been easier-but that still doesn’t mean it’s hassle-free! The difficulty in ASP.NET 2.0 is that it’s so complete and flexible that there are many pieces that must be woven together to build a robust, scalable, and efficient application.(ASP.NET 2.0 中一个最主要的改进是其直观的本质,实际上,跟前一版本相比,ASP.NET 2.0把你所需写的编码量减少了75%。创建交互性的web应用从没这么简单过—但那并不意味着万事顺利了。ASP.NET 2.0的困难在于,它是如此的齐备,灵活,为了建立一个强壮,扩缩性好的,效率高的应用,需要把很多部件编织在一起)…”

就是说,你需要学的东西还是很多,所以你应该买这本书。。。当然这是广告而已

但在过去一年内,Ruby on Rails象春天的野火一样越烧越旺,虽然它们还有其他的优点,但最大的卖点应该就是它们极大地简化了数据库驱动的web应用的开发

虽然目前.NET中的语言还不具备象动态语言Ruby那样的特征,但看一下ASP.NET 2.0中的新的编译模型中的Build Providers,譬如参考我们敬爱的Dino Esposito在MSDN上的专栏,

Build Providers
http://msdn.microsoft.com/msdnmag/issues/06/02/CuttingEdge/default.aspx

还有类似下面的
DLINQ ASP.NET Build Provider and DLINQ DataSource
http://weblogs.asp.net/aaguiar/archive/2005/12/14/433143.aspx

通过编码生成,在当前ASP.NET架构内建立一个简化数据库驱动的web应用的框架会很难么?

Castle 项目里有个MonoRail,有点类似,虽然这里并不想讨论它的优缺点,但它从一开始就偏离了ASP.NET中的WebForms模型,有点“脱离了广大群众”的味道,,是否能为大家接受还需要时间来证明。

另外,Java中有个Trails项目也可供参考
https://trails.dev.java.net/