# ReviewAdd.aspx

页面描述： 客户在ReviewAdd页面可以输入他们对产品的意见

使用说明： 当用户点击产品细节页面(ProductsDetails.aspx ).关于一件产品的"Review this Product"图象链接时,出现ReviewAdd页面.该链接事实上不是产品细节页面的一部分,而是集成到页面内的ReviewList用户控件( _ReviewList.ascx )的一部分

当用户点击链接"Review this Product"时,用户控件调用ReviewAdd.aspx页面,要评价的产品ID以查询字符串的形式传给页面.例如:如果用户想添加"Mighty, Mighty Pen,"的评价,显示网页的URL会是ReviewAdd.aspx?productID= 371)

页面逻辑完全压缩到两个事件句柄中, Page_Load事件句柄与图象控件的鼠标事件的句柄

Page_Load 事件句柄：Page_Load事件句柄使用网页的Request对象的参量集获得特定的产品ID参量.参量集包含所有的查询字符串,表单域, cookie和HTTP请求中由客户端发送的服务器变量.当进行页面间的导航传送的时候,正是通过这种典型的API网页开发者存取了声明

在将ProductID转换为整型变量后， Page_Load事件句柄创建了ProductDB类的一个实例，调用了其GetProductDetails方法,将它传给了产品ID。该方法内部使用ProductDetail 存储过程来从commerce数据库获得产品信息

Page_Load事件句柄的代码装入条件代码块中,只有Page.IsPostBack 为FALSE的时候才执行.这种校验机制可确定是否页面第一次被访问,或者是否由于用户点击了提交按钮页面才显示(这将导致页面’回滚”回服务器页面.IsPostBack属性提供一种简易的方法确保页面只会获得页面第一次显示时产品的信息

ReviewAddBtn_Click 事件句柄： ReviewAddBtn_Click事件句柄在用户点击页面的提交图象的按钮时才起作用.这一句柄展示了ASP.NET页面和服务器控件的重要特征;尽管点击发生在浏览器里,但在页面回滚后句柄运行在服务器里

所有从浏览器向服务器传递鼠标事件信息的逻辑,和查找并执行正确方法的逻辑都装入页面和控件框架中.做到这一点,并不需要任何客户端的脚本,ACTIVEX控件,JAVA APPLETS或者任何其他专门的程序.这种逻辑和浏览器,包括 Internet Explorer, Netscape,Opera协调工作

ReviewAddBtn_Click事件句柄调用ReviewsDB类的AddReview方法,依次调用ReviewsAdd存储过程保存用户的评价意见到商品数据库.而重要的内容在于AddReview方法被调用之前,HTML进行了编码.这一机制提供了抵抗普通黑客技术的保护.即把图象和链接嵌入到粘贴的文本,当后来提交网页的时候,中止页面上显示远程图象(通过链接)

验证用户输入： 登录页面要求用户输入姓名与邮件地址。 如果查看LoginBtn_Click事件句柄的源代码，会发现没有输入确认代码.使用内置的ASP.NETvalidation控件，可清楚的定义任何输入控件的确认约束。

ASP.NET用内置的validation控件来处理确认要求: RequiredField, CompareValidator， RegularExpressionValidator，RangeValidator， 和 CustomValidator控件。 validation控件体系是可扩展的，以便其他特定环境控件(ZIP code validators, country code validators等)也可以由第三方来开发。

可以把validation控件放在页面的任何位置并使用validator控件的ControlToValidate属性链接到目标输入控件。 你可以为Text属性随意指定一段文本，当输入数据没有经过确认验证时，显示该文本。如果有必要的话，可以为一个控件设置多个validation控件共同验证该控件信息（例如，某个域是必须填写的，而且要符合某项指定的要求）。

如果页面在支持EcmaScript 1.2和动态HTML (DHTML) 4.0的浏览器中显示， validation控件能完成客户端的确认,提供了即时的回馈给用户。 Validator控件也能用服务器端代码来完成校验，因而如果浏览器不支持DHTML或者如果客户端的脚本失效,确认校验仍可执行。不必作代码的改动就可以实现上面的两种方式—在基本浏览器以及支持DHTML的浏览器上用于处理校验所需要的全部逻辑都建立在在控件内部了。

如果使用validation控件， 服务器端代码通过检验确认控件的IsValid属性确定是否用户的输入通过了校验，此外,可以检验网页的IsValid属性； 该属性是页面中全部validation控件的IsValid属性的集合。如果某一validation控件检验发生失败,页面的IsValid属性将设置为false。

上面的内容就是登录页面的工作原理，只有页面内的所有控件都有效，我们才可以继续并注册用户。如果其中一个输入域无效，页面只是再次显示。同时，validation控件负责自动向用户显示适当的出错信息。