1. 概述
.NET 3.5和Visual Studio 2008的发布,在微软的.NET战略具有里程碑的意义,在Web开发方面,包含了一个具有强大功能的HTML Web设计器,该设计器提供了分割视图编辑,嵌套母板页,以及完善的CSS集成,同时改进了对JavaScript的支持,包括智能提示和调试等。仅仅在.NET 3.5发布后的20天,微软推出了ASP.NET 3.5 Extensions第一个预览版本,正式版将会在2008年上半年发布,里面包括了更多的ASP.NET 的特性,主要有如下几个部分:
(1) ASP.NET MVC 框架
(2) ASP.NET AJAX改进
(3) ASP.NET 动态数据支持
(4) ASP.NET Silverlight支持
(5) ADO.NET数据服务
在本文中,我将通过几个简单的示例来展示ASP.NET 3.5 Extensions中的部分新特性。
2. ASP.NET MVC框架
MVC的概念,已经出现了很多年了,它将应用程序的实现分成三个部分,Model进行数据状态的保持,View进行用户界面的展现,Controller进行用来处理用户的交互,操作Model和选择View进行数据的显示。ASP.NET MVC Framework中第一个关注点就是分离,以便方便的进行测试。同时它把aspx页、模板页、用户控件都当作View来使用,同时它还提供了非常强大的URL路由选择引擎,接下来我们通过示例来展示这些特性。
第一步:建立Model,使用LINQ to SQL类建立一个Product的数据模型
第二步:建立View,用一个aspx页面来显示Product的详细信息,页面继承于泛型的ViewPage:
public partial class Product_Product : ViewPage
{ protected void Page_Load(object sender, EventArgs e) { } }
在aspx页中显示数据,直接使用标记输出:
ProductDetail:
ProductId:
Name:
Descn:
第三步:建立Controller,继承于Controller基类,并且添加Action方法,同时控制用Product视图来实现数据,并传入要显示的数据对象:
public class ProductController : Controller { [ControllerAction] public void Index() { MSPetShopDataContext db = new MSPetShopDataContext(); ProductInfo productinfo = db.ProductInfos.Single(p => p.ProductId == "BD-03"); RenderView("Product", productinfo); } }
第四步:配置路径选择,在Application_Start方法中进行配置:
void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add( new Route { Url = "[controller]/[action].mvc", Defaults = new { action = "Index"}, RouteHandler = typeof(MvcRouteHandler) } ); }
建立一个基于ASP.NET MVC Framework的应用程序,基本上就分上面的四步。目前ASP.NET MVC Framework还只是实现了一些基本的功能,在正式版中,其HTML帮助方法将会有几十个之多,让我们拭目以待吧。
3. ASP.NET AJAX改进
在ASP.NET 3.5 Extensions中对于ASP.NET AJAX改进最重要的一点就是更好的浏览器历史的支持,是我们可以很方便的进行控制浏览器的前进、后退按钮。它提供了两种方式供我们选择,使用服务器端控件或者使用客户端脚本。下面我将用示例简单演示一下如何使用服务器段控件进行浏览器历史的控制。
添加ScriptManager控件,并设置其EnableHistory属性为true,允许浏览器的历史管理,以及OnNavigate处理为OnNavigateHistory函数,以便处理导航时的事件。同时EnableStateHash属性设为了false,主要是为了便于调试,以明文的方式进行状态的查看,如果实际使用的时候可以根据需要决定是否需要对状态进行Hash加密:
创建浏览器历史点,在单击按钮时创建,通过AddHistoryPoint方法来添加:
public void ButtonClick(object sender, EventArgs e) { LabelHistoryData.Text = ((Button)sender).Text; ScriptManager.GetCurrent(this).AddHistoryPoint(key, LabelHistoryData.Text); }
进行导航处理:
public void OnNavigateHistory(object sender, HistoryEventArgs e) { LabelHistoryData.Text = Server.HtmlEncode(e.State[key]); }
同时为了演示,需要在页面上添加三个按钮:
Date and Time:
Page's refresh state: