ASP.NET StartKit Commerce簡單,容易理解。
我認為是初次學習.NET代碼的首選,不怕各位笑話,我曾經完整閱讀該項目代碼3次。
那麼,通過閱讀我們能學習到什麼知識呢?請看我下面的總結:
1。多層結構的實現
依我見是2層結構:PL層和BLL層(沒有明顯的DAL層,DAL和BLL共同組成BLL層)。但是我們可以學習到Db過程的調用方法。
2。Web服務的簡單使用
3。Web使用者控制項的使用
4。資料繫結的相關知識
讓我們先看該項目中的一段代碼:
<asp:HyperLink cssclass="MenuSelected" id="HyperLink2" Text='<%# DataBinder.Eval(Container.DataItem, "CategoryName") %>' NavigateUrl='<%# "productslist.aspx?CategoryID=" + DataBinder.Eval(Container.DataItem, "CategoryID") + "&selection=" +
Container.ItemIndex %>' runat="server" />
說明:
(1)資料繫結用單引號,單引號中的字元用雙引號。
(2)特別注意屬性:Container.ItemIndex,它產生的是每一項的ID,它是從零開始的。功能類似MS SQL的IDENTITY(0,1).想想我以前的項目為了展現每一行的索引,往往利用在DB中建立暫存資料表產生行索引,再綁定資料的做法真愚。
5。基於表單的驗證
在Web.config檔案中,我們可以看到如下2段代碼:
<authentication mode="Forms">
<forms name="CommerceAuth" loginUrl="login.aspx" protection="All" path="/" />
</authentication>
<location path="OrderDetails.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
說明:這樣就禁止未通過登陸驗證的使用者訪問頁面:OrderDetails.aspx,自動將未登陸使用者引導到頁面login.aspx進行登陸驗證
6.購物車的實現
購物車是電子商務站的典型功能。在此項目中我們可以看到購物車的增加,刪除和修改功能的典型操作。同時也學習控制項的一些經典使用方法
。
讓我們先看代碼:
<asp:DataGrid id=MyList runat="server" BorderColor="black" GridLines="Vertical" cellpadding="4" cellspacing="0"
DataKeyField="Quantity" AutoGenerateColumns="false">
......
</asp:DataGrid>
利用DataKeyField屬性綁定資料來源的欄位Quantity,也就是此項目中每個商品的購買數量。
類System.Web.UI.WebControls.BaseDataList的屬性DataKeyField是擷取或設定由 DataSource 屬性指定的資料來源中的鍵欄位。
同時DataGrid和DataList都是BaseDataList的子類。
讓我們再看下面代碼:此代碼是購物車的修改方法實現。
void UpdateShoppingCartDatabase() {
ASPNET.StarterKit.Commerce.ShoppingCartDB cart = new ASPNET.StarterKit.Commerce.ShoppingCartDB();
// Obtain current user's shopping cart ID
String cartId = cart.GetShoppingCartId();
// Iterate through all rows within shopping cart list
for (int i=0; i < MyList.Items.Count; i++) {
// Obtain references to row's controls
TextBox quantityTxt = (TextBox) MyList.Items[i].FindControl("Quantity");
CheckBox remove = (CheckBox) MyList.Items[i].FindControl("Remove");
// Wrap in try/catch block to catch errors in the event that someone types in
// an invalid value for quantity
int quantity;
try {
quantity = Int32.Parse(quantityTxt.Text);
// If the quantity field is changed or delete is checked
if (quantity != (int)MyList.DataKeys[i] || remove.Checked == true) {
Label lblProductID = (Label) MyList.Items[i].FindControl("ProductID");
if (quantity == 0 || remove.Checked == true) {
cart.RemoveItem(cartId, Int32.Parse(lblProductID.Text));
}
else {
cart.UpdateItem(cartId, Int32.Parse(lblProductID.Text),quantity);
}
}
}
catch {
MyError.Text = "There has been a problem with one or more of your inputs.";
}
}
}
說明:
(1)我們利用(int)MyList.DataKeys[i]取出綁定在每一行的商品購買數量值
(2)利用方法FindControl()在當前的命名容器中搜尋指定的伺服器控制項。
7。ms sql中定時任務的實現
利用MS SQL的JOB功能實現在特定時間時自動運行過程ShoppingCartRemoveAbandoned,以刪除購物車表(CMRC_ShoppingCart)中的多餘資料。
8。全球化的相關知識
見Global.asax.cs中代碼:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
try
{
if (Request.UserLanguages != null)
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
else
// Default to English if there are no user languages
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
}
catch (Exception ex)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
}
}
說明:全球化是為多種文化使用者支援地方化使用者介面和地方性資料應用程式的設計和開發過程。在.NET 構架中,CultureInfo 類體現了一個特
定文化的資訊。這個資訊包括書寫系統、所使用的曆法、日期和時間格式風格、數字和貨幣風格以及分類原則。地方化是為應用程式支援的每
種文化將應用程式資源轉變為語言版本的過程。當前文化在每次使用者嚮應用程式請求頁面時根據瀏覽器設定修改。
9。其他知識點:
(1)緩衝的使用
(2)Web.config檔案中自訂節點的設定和讀取
等等。
本人第一次寫閱讀總結,由於水平有效可能有誤,希望大家多多指出。謝謝。
下次將分類總結ASP.NET StartKit TimeTracker的閱讀心得。