好搞笑啊,原来背景是这个:background="images/sitebkgrd.gif"
table的艺术:这个页面是有无数个table组成的
作为一个checkout页,它的目的就是将所有的商品信息摆出来,然后要你确认。
所以它就有DataGrid和summit。
DataGrid是这样和数据库连起来的:按道理来说,其实他连起来的只不过是一个函数GetItems()的返回值而已。
MyDataGrid.DataSource = cart.GetItems(cartId);(这个函数返回一个DataReader)
MyDataGrid.DataBind();
在这个页面中间,abc.abc是作为事件,而abc_abc是事件处理程序。
Page_Init方法(事件处理程序),可以响应Init事件。利用Init事件可以在运行时创建控件,并将它们添加到页中(Page_Load方法用于在运行时执行控件的初始化)。利用Init事件还可以以编程的方式实现事件以及处理程序的连接。
void Page_Init (Object sender, EvenArgs e)
{
EqualsButton.Click += new EventHandler (OnAdd);
}
这是Vs。net用于连接事件和事件处理程序的技术。
在checkout.aspx(或者说是:checkout类)页中一共包含了一些什么样的元素?
(1),checkout()构造函数
(2),Page_Load(object sender, System.EventArgs e)用来在运行时执行控件的初始化
(3),SubmitBtn_Click(object sender, System.Web.UI.ImageClickEventArgs e)
(4), Page_Init(object sender, EventArgs e).
我懂了,(1)checkout()的作用是:将页面初始化的Page.Init跟事件处理程序(4)Page_Init()联系起来 ,而(4)把(2)和(3)这两个EventHandler分别与它们的事件this.Load和this.SubmitBtn.Click联系起来。
在checkout.aspx页中:
private void Page_Init(object sender, EventArgs e) {
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
}
#region Web Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent() {
this.SubmitBtn.Click += new System.Web.UI.ImageClickEventHandler(this.SubmitBtn_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
Page_Init把Page_Load和SubmitBtn_Click这两个EventHandler分别与它们的事件this.Load和this.SubmitBtn.Click联系起来。
我们来看一看SubmitBtn_Click,里面有三个ID,为cartId,CustomerID,OrderID,注意它们中间有什么关系。
orderId = ordersDatabase.PlaceOrder(customerId, cartId);
要注意的是:本页面只有注册用户才能进入,但是代码中却没有验证用户的代码,那它是怎么实现,确保只有注册用户才能进入呢?
本程序使用的验证方法是:Forms-Based Security,利用webConfig中间的设置来确保只有认证用户才能进入。