petshop学习笔记(1)

         最近一直在看PetShop4.0,因为之前一直使用net1.1开发,本想转到2.0开发,怎奈公司的服务器是2000,想升级的话一大堆麻烦着等我。而且也不一定升级后就好,老的服务器,还有其他的因素使得我放弃了转到2.0了。

         等待了很久,还是忍不住要学下去,不然就被技术给淘汰了,现在都出到3.5了还来学2.0。没办法,我的想法是跟主流不跟最先进的。现在开始我的学习了,可能会出现很多很多的错误想法及做法,但我想总好过没想法及做法。

  打开PetShop发现总共有22个项目啊,感觉好多,很了一下其他人的解读,但感觉还是很多不理解,还是自己慢慢斟酌。

  从哪开始看起好呢??麻烦的东西,太多项目看起来可能会有些乱.没办法,一般一个网站过来我都是从首页看起,那就开始吧,从开始看起。Web/Default.aspx ,感觉使用习惯了VS2003然后来使用2005有些不习惯了,怎么一打开来都是代码,点击后设计,发现中间有个Categories控件的东西,再看看源代码,原来是

 <PetShopControl:NavigationControl ID="Categories" runat="server"></PetShopControl:NavigationControl>

最上面还有个<%@ Register Src="Controls/NavigationControl.ascx" TagName="NavigationControl" TagPrefix="PetShopControl" %>
原来是用户控件 ,打开Controls/NavigationControl.ascx  

这个页面只用了Repeater控件,这个控件绑定的内容是

td class="<%= ControlStyle %>"><asp:HyperLink runat="server" ID="lnkCategory"  NavigateUrl='<%# string.Format("~/Products.aspx?page=0&categoryId={0}", Eval("Id")) %>' Text='<%# Eval("Name") %>' /><asp:HiddenField runat="server" ID="hidCategoryId" Value='<%# Eval("Id") %>' /></td>

再看看他的源代码

 

  1. using System;
  2. using System.Web.UI.WebControls;
  3. using PetShop.BLL;
  4. using PetShop.CacheDependencyFactory;
  5. namespace PetShop.Web {
  6.     public partial class NavigationControl : System.Web.UI.UserControl {
  7.                
  8.         private string controlStyle;
  9.         // control layout property
  10.         protected string ControlStyle {
  11.             get { return controlStyle; }
  12.         }
  13.     
  14.         // Get properties based on control consumer
  15.         protected void GetControlStyle() {
  16.             if (Request.ServerVariables["SCRIPT_NAME"].ToLower().IndexOf("default.aspx") > 0)
  17.                 controlStyle = "navigationLinks";
  18.             else
  19.                 controlStyle = "mainNavigation";
  20.         }
  21.        
  22.         protected void Page_Load(object sender, EventArgs e) {
  23.             GetControlStyle();
  24.             BindCategories();
  25.             // Select current category
  26.             string categoryId = Request.QueryString["categoryId"];
  27.             if (!string.IsNullOrEmpty(categoryId))
  28.                 SelectCategory(categoryId);
  29.             // Add cache dependency
  30.             this.CachePolicy.Dependency = DependencyFacade.GetCategoryDependency();
  31.         }
  32.         // Select current category.
  33.         private void SelectCategory(string categoryId) {
  34.             foreach (RepeaterItem item in repCategories.Items) {
  35.                 HiddenField hidCategoryId = (HiddenField)item.FindControl("hidCategoryId");
  36.                 if(hidCategoryId.Value.ToLower() == categoryId.ToLower()) {
  37.                     HyperLink lnkCategory = (HyperLink)item.FindControl("lnkCategory");
  38.                     lnkCategory.ForeColor = System.Drawing.Color.FromArgb(199, 116, 3);
  39.                     break;
  40.                 }
  41.             }
  42.         }
  43.         // Bind categories
  44.         private void BindCategories() {
  45.             Category category = new Category();
  46.             repCategories.DataSource = category.GetCategories();
  47.             repCategories.DataBind();            
  48.         }
  49.     }
  50. }

根据源代码再来分析一下

using PetShop.BLL     using PetShop.CacheDependencyFactory     使用了PetShop.BLL及CacheDependencyFactory这两个类

开始从Page_Load开始

使用GetControlStyle()主要是获取样式,BindCategories()将读取的数据绑定到Repeater这个控件上,到底怎么绑定,看源代码

 

  1.  // Bind categories
  2.         private void BindCategories() {
  3.             Category category = new Category();
  4.             repCategories.DataSource = category.GetCategories();
  5.             repCategories.DataBind();            
  6.         }

实例化一个category ,然后使用category的GetCategories方法读取得到的数据进行绑定到Repeater这个控件上.

 

 

  1. // Select current category
  2.             string categoryId = Request.QueryString["categoryId"];
  3.             if (!string.IsNullOrEmpty(categoryId))
  4.                 SelectCategory(categoryId);

上面的代码主要是样式的变化,但我感觉如果在真正的项目里这样做不太好,因为他是跟住Repeater的所在项目,也就是排在第几行的数字跟一个隐藏HiddenField绑定的数据ID进行比较,若ID值变化太大的话那不就对不上了!

/ Add cache dependency
            this.CachePolicy.Dependency = DependencyFacade.GetCategoryDependency();

这一句不太明白,要慢慢研究,E文好像是写着添加红缓存的依赖项

这个到时研究到DependencyFacade会来说明这个是干什么用的。

返回default.aspx他的defalut.aspx.cs文件中

namespace PetShop.Web {
 public partial class Default : System.Web.UI.Page {

        /// <summary>
        /// Redirect to Search page
        /// </summary>
  protected void btnSearch_Click(object sender, EventArgs e) {
            WebUtility.SearchRedirect(txtSearch.Text);
  }
 }
}

代码只有这么一点

public partial class Default  在1.1中好像没有partial这个修饰符啊,看网上有的人解释

“还记得.net1.1时,在aspx文件中,是有大片的WEB设计器生成的代码的。到了.net2.0时,asp.net的aspx文件就干净多了,partial起了重要的作用,在这里partial主要是用来隐藏设计器代码的”

 

btnSearch_Click这个方法是点击搜索后的一个方法,怎么没有按钮的触发器写法了?

再看看WebUtility这个类

定义了几个静态方法

InputText()过滤恶意代码的方法,不过感觉不够全面

CleanNonWord()去除文字,剩下数字

SearchRedirect()搜索跳转

GetCategoryName() 根据categoryId分类项目的ID读取分类项目的名称

GetProductName() 根据productId产品ID读取产品的名称

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值