在主页面上可以导航到各个类别,导航到各个类别或者某类中的具体动物时,还可以通过navbar,随时导航到各个类别。
所有存在搜索的页面都是通过navbar.ascx用户控件中的<form id="search" method="get" action="Search.aspx">导航的。
主页面default.aspx通过 href="Category.aspx?categoryId=BIRDS"连接将用户导航到具体的物种列表。
在navbar.ascx中,通过<a href="SignOut.aspx" >,<a href="EditAccount.aspx">,<a href="ShoppingCart.aspx">,<a href="SignIn.aspx">分别导航到登出,编辑个人帐户信息,购物
车,和登录页面。
在Category.aspx中<form id="form" method="post" runat="server">,请求到该页面时SimplePager自定义控件会调用Category.aspx.cs的protected void PageChanged(object sender, DataGridPageChangedEventArgs e)方法,通过Request["categoryId"]获取该类动物的列表。并构造单独动物的链接--<A href='Items.aspx?productId=<%# DataBinder.Eval(Container.DataItem, "Id") %>'>,通过动物id,获取动物的详细信息。
对于SignIn.aspx,如果用户没有账号,可以通过<a href="CreateAccount.aspx">导航到<a href="CreateAccount.aspx">。用户点击登录按钮会触发SignIn.aspx.cs的SubmitClicked()事件处理器方法,该方法通过ProcessFlow.AccountController 处理登录请求,如果登录成功导航到合适的页面,HttpContext.Current.Response.Redirect(URL_ACCOUNTSIGNIN, true)--主页面或HttpContext.Current.Response.Redirect(FormsAuthentication.GetRedirectUrl(userId, false), true)--其他页面。
其他页面的原理差不多,也就是一部分导航是直接通过<a>标签写在页面中,另一部分是通过ProcessFlow中的导航逻辑类进行按照逻辑和操作状态导航(利用HttpContext.Current.Response.Redirect)。
petshop使用基于Form的认证模式:
<authentication mode="Forms">
<forms name="PetShopAuth" loginUrl="SignIn.aspx" protection="None" timeout="60"/>
</authentication>
其他的location定义了拒绝匿名访问的页面,点击这些页面时,用户如果没有登录系统会首先转到登录页面。
用户信息和用户的购物信息基本上是通过ProcessFlow中的AccountController.cs和CartController.cs实现的。
用户登录时会调用AccountController.cs的public bool ProcessLogin(string userId, string password)方法,登录成功后会通过HttpContext.Current.Session[ACCOUNT_KEY] = myAccountInfo在session中储存用户帐号信息。创建新帐号成功后同样会在session中储存用户帐号信息。同理,更新帐户信息会更新session,退出会清除session。
对于购物信息,也是存在于session中。存储购物车后会将购物车信息储存在session中。存储信用卡时会在session中保存信用卡信息,等等,不一一介绍了。
作者:
原名:宋巍巍网名:╄ 冷枫编程经验四年,思维敏捷,时时关注新技术,精通 Java,J2ME,JavaBean,EJB,Asp,Asp.NET,PHP,AS编程,对Flex+CF+Ajax也有所研究,挺喜欢FCS模式的,对Flashcom研究颇深曾做过两个项目目前在已经 投放市场. Email: JavaProgramers@mail.csdn.com MSN: Javaprogramers@hotmail.com