表现层笔记之页面是如何调用
很久以前就疑惑这段代码是怎么回事(下面还是拿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,那么会在页面进行提示消息。
分类:
dotNet
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南