表现层笔记之页面是如何调用

很久以前就疑惑这段代码是怎么回事(下面还是拿petshop的product.aspx.cs为例吧):

publicpartialclass Products : System.Web.UI.Page {

protectedvoid Page_Load(object sender, EventArgs e) {
//get page header and title
Page.Title = WebUtility.GetCategoryName(Request.QueryString["categoryId"]);
}
}

这样这里类Products继承了System.Web.UI.Page这个类,二page类通过继承System.Web.UI.Control类,从而拥有了web控件的特性,它同时继承了IHttpHandler这个接口,作为处理Http Web请求的接口。page就是通过Control类继承了Load。张逸老师将了MVC模型在petshop表现层中,但是我对这个模型不太理解。还是先引用下张老师书最经典的例子:

protectedvoid wzdCheckOut_FinishButtonClick(object sender, WizardNavigationEventArgs e) {
if (Profile.ShoppingCart.CartItems.Count >0) {//说明有宠物下单了
if (Profile.ShoppingCart.Count >0) {//我觉得这个多余吧

// display ordered items
//应该是显示清单吧 调用CartList.ascx.cs中的Bind函数
CartListOrdered.Bind(Profile.ShoppingCart.CartItems);

// display total and credit card information
ltlTotalComplete.Text = ltlTotal.Text;
ltlCreditCardComplete.Text
= ltlCreditCard.Text;

// create order
OrderInfo order =new OrderInfo(int.MinValue, DateTime.Now, User.Identity.Name, GetCreditCardInfo(), billingForm.Address, shippingForm.Address, Profile.ShoppingCart.Total, Profile.ShoppingCart.GetOrderLineItems(), null);

// 调用BLL.Order
Order newOrder =new Order();
newOrder.Insert(order);

// destroy cart
Profile.ShoppingCart.Clear();
Profile.Save();
}
}
else {
lblMsg.Text
="<p><br>Can not process the order. Your cart is empty.</p><p class=SignUpLabel><a class=linkNewUser href=Default.aspx>Continue shopping</a></p>";
wzdCheckOut.Visible
=false;
}
}

这个事件是Wizard控件的事件,在执行完所有的Wizard步骤后触发。那么这个MVC是怎么样理解的呢?首先从页面控件得到属性,调用OrderInfo订单实体类。然后,调用BLL.Insert方法吧这个OrderInfo实体,插入到数据库。解释:实体类的即是---View、Order对象(上面这段代码调用了Order对像的Insert方法)即是Model、而这个控件FinishButtonClick事件应该就是Controler吧。这个例子为什么典型呢?因为View即影响了Model 的值,而Model的值又反过来影响了View。具体是这样的:View的属性传递给OrderInfo对象,然后调用Order的Insert数据库。而我们上面也调用Profile.ShoppingCart.CartItems.Count 的数量进行了判断,如果它的值是0,那么会在页面进行提示消息。

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2011-07-19 17:22  小霖2012  阅读(333)  评论(0编辑  收藏  举报