Article ID: 910309
Article Last Modified on 3/16/2007
APPLIES TO
- Microsoft Commerce Server 2002 Standard Edition
- Microsoft Visual Basic .NET 2003 Standard Edition
- Microsoft Visual Basic .NET 2002 Standard Edition
INTRODUCTION
This article contains the source code for the Microsoft Commerce Server 2002 Software Development Kit (SDK) Microsoft ASP.NET-based Catalog Sitelet in Microsoft Visual Basic .NET.
Note The source code for the ASP.NET-based Catalog Sitelet was previously only available in Microsoft Visual C#.
MORE INFORMATION
The following code is the source code for the ASP.NET-based Catalog Sitelet in Visual Basic .NET.
Browse.aspx
<%@ Page Description="Browse Page" CodePage="65001" Debug="true"%> <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Globalization"%> <%@Import Namespace="System.Resources"%> <%@Import Namespace="System.Threading"%> <%@Import Namespace="catalogsitelet"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%> <%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %> <!--------------------------------------------------------------------- -- File: browse.aspx -- -- Summary: Page used to browse Catalog -- -- Sample: Catalog Sitelet -- ----------------------------------------------------------------------- -- This file is part of the Microsoft Commerce Server 2002 SDK -- -- Copyright (C) 2002 Microsoft Corporation. All rights reserved. -- -- This source code is intended only as a supplement to Microsoft -- Commerce Server 2002 and/or on-line documentation. See these other -- materials for detailed information regarding Microsoft code samples. -- -- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -- PARTICULAR PURPOSE. ----------------------------------------------------------------------> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="VB"> <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script runat="Server" Language="VB"> Private rm As ResourceManager Private strLanguage As String = Nothing Private catDisplayName As String = Nothing Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) rm = ResourceFactory.RManager If rm Is Nothing Then 'Resources are unavailable.Server.Transfer(Utility.errorPage) End If End Sub Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) Dim SelectedCulture As CultureInfo Dim coll As NameValueCollection = Request.QueryString strLanguage = coll(Utility.languageLabel) Try SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) Catch e As Exception SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) strLanguage = Utility.englishLanguage End Try Footer.Language = strLanguage ' If another culture was selected, use that instead If Not (SelectedCulture Is Nothing) Then Thread.CurrentThread.CurrentCulture = SelectedCulture Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture End If catDisplayName = Utility.GetDisplayName(Utility.catalogName, strLanguage) If Not IsPostBack Then UpdateCategories End If End Sub Sub RootCategoryListing_ItemCommand(ByVal source As Object, ByVal args As RepeaterCommandEventArgs) Dim strArg As String = CType(args.CommandArgument, String) Dim arr As String() = strArg.Split("&"C) Dim category As String = arr(0) Dim dispCategory As String = arr(1) Dim products As DataSet = Nothing Dim categories As DataSet = Nothing 'Get child category and products for given category GetProductListing(category, products, categories) If Not (0 = products.Tables(0).Rows.Count) Then 'List child products for category ProductListing.DataSource = products ProductListing.DataBind ProdName.Visible = True ProductListing.Visible = True ProdName.Text = rm.GetString(Utility.browseProdCategories) & " " & dispCategory Else ProdName.Visible = False ProdName.Text = Nothing ProductListing.Visible = False End If If Not (0 = categories.Tables(0).Rows.Count) Then 'List child category for parent category CategoryListing.DataSource = categories CategoryListing.DataBind CatName.Visible = True CategoryListing.Visible = True CatName.Text = rm.GetString(Utility.browseChildCategories) & " " & dispCategory Seprator.InnerHtml = "<BR>" Else CatName.Visible = False CatName.Text = Nothing CategoryListing.Visible = False Seprator.InnerHtml = Nothing End If End Sub Sub UpdateCategories() Dim catalog As ProductCatalog = CommerceContext.Current.CatalogSystem.GetCatalog(Utility.catalogName) RootCategoryListing.DataSource = catalog.GetRootCategories RootCategoryListing.DataBind End Sub Sub ProductListing_ItemCommand(ByVal source As Object, ByVal args As RepeaterCommandEventArgs) Response.Redirect(rm.GetString(Utility.productPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage & "&" & Utility.productID & "=" & CType(args.CommandArgument, String)) End Sub Sub GetProductListing(ByVal category As String, ByRef product As DataSet, ByRef categories As DataSet) Dim catalog As ProductCatalog = CommerceContext.Current.CatalogSystem.GetCatalog(Utility.catalogName) product = catalog.GetCategory(category).GetProducts categories = catalog.GetCategory(category).GetChildCategories End Sub </script> <title> <%=rm.GetString(Utility.browsePageTitle) &" "& catDisplayName%> </title> <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css"> </HEAD> <body> <DIV CLASS="Heading"> <%= rm.GetString(Utility.browsePageTitle) &" "& catDisplayName%> </DIV> <BR> <BR> <form id="browse" method="post" runat="server"> <TABLE CELLPADDING="4" CELLSPACING="0" BORDER="0" WIDTH="85%"> <TR> <TD VALIGN="top" BGCOLOR="silver" WIDTH='<%=rm.GetString("Width")%>'> <asp:Repeater id="RootCategoryListing" OnItemCommand="RootCategoryListing_ItemCommand" runat="server"> <HeaderTemplate> <B> <%= rm.GetString(Utility.browsePageSubTitle)%> </B> <BR> </HeaderTemplate> <ItemTemplate> <asp:LinkButton id="SelectCategoryBtn" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("CategoryName") & "&" & CType(Container.DataItem, DataRowView)("DisplayName") %>' runat="server"> <%# DataBinder.Eval(Container.DataItem, "DisplayName") %> </asp:LinkButton> </ItemTemplate> <SeparatorTemplate> <BR> </SeparatorTemplate> </asp:Repeater> </TD> <TD VALIGN="top"> <b> <asp:Label id="CatName" runat="server" /> </b> <asp:Repeater id="CategoryListing" OnItemCommand="RootCategoryListing_ItemCommand" runat="server"> <HeaderTemplate> <BR> </HeaderTemplate> <ItemTemplate> <asp:LinkButton id="SelectCategory" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("CategoryName") & "&" & CType(Container.DataItem, DataRowView)("DisplayName") %>' runat="server"> <%# DataBinder.Eval(Container.DataItem, "DisplayName") %> </asp:LinkButton> </ItemTemplate> <SeparatorTemplate> <BR> </SeparatorTemplate> </asp:Repeater> <DIV id="Seprator" runat="server" /> <b> <asp:Label id="ProdName" runat="server" /> </b> <asp:Repeater id="ProductListing" OnItemCommand="ProductListing_ItemCommand" runat="server"> <HeaderTemplate> <BR> </HeaderTemplate> <ItemTemplate> <asp:LinkButton id="SelectProductBtn" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("ProductID") %>' runat="server"> <%# DataBinder.Eval(Container.DataItem, "Name") %> <br> </asp:LinkButton> <asp:Label id="Describe" runat="server"> <%# DataBinder.Eval(Container.DataItem, "description") %> </asp:Label> </ItemTemplate> <SeparatorTemplate> <BR> <BR> </SeparatorTemplate> </asp:Repeater> </TD> </TR> </TABLE> <Localized:Footer runat="server" ID="Footer" /> </form> </body> </HTML>
Default.aspx
<%@Page Description="Default Page" CodePage="65001" %> <%@Import Namespace="catalogsitelet"%> <%@Import Namespace="System.Threading"%> <%@Import Namespace="System.Resources"%> <%@Import Namespace="System.Globalization"%> <!--------------------------------------------------------------------- -- File: Default.aspx -- -- Summary: Language page for Catalog Sitelet -- -- Sample: Catalog Sitelet -- ----------------------------------------------------------------------- -- This file is part of the Microsoft Commerce Server 2002 SDK -- -- Copyright (C) 2002 Microsoft Corporation. All rights reserved. -- -- This source code is intended only as a supplement to Microsoft -- Commerce Server 2002 and/or on-line documentation. See these other -- materials for detailed information regarding Microsoft code samples. -- -- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -- PARTICULAR PURPOSE. ----------------------------------------------------------------------> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="VB"> <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script runat="Server" Language="VB"> Private rm As ResourceManager Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 'Get the ResourceManager from the Application object rm = ResourceFactory.RManager If rm Is Nothing Then 'Resources are unavailable Server.Transfer(Utility.errorPage) End If End Sub Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) Try Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0)) Catch generatedExceptionVariable0 As Exception 'Provide fallback for not supported languages Thread.CurrentThread.CurrentCulture = New CultureInfo(Utility.englishLanguage) End Try Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture If Not IsPostBack Then English.Text = rm.GetString(Utility.English) German.Text = rm.GetString(Utility.German) French.Text = rm.GetString(Utility.French) Japanese.Text = rm.GetString(Utility.Japanese) English.NavigateUrl = rm.GetString(Utility.mainPageUrl) & "?" & Utility.languageLabel & "=" & Utility.englishLanguage German.NavigateUrl = rm.GetString(Utility.mainPageUrl) & "?" & Utility.languageLabel & "=" & Utility.germanLanguage French.NavigateUrl = rm.GetString(Utility.mainPageUrl) & "?" & Utility.languageLabel & "=" & Utility.frenchLanguage Japanese.NavigateUrl = rm.GetString(Utility.mainPageUrl) & "?" & Utility.languageLabel & "=" & Utility.japaneseLanguage End If End Sub </script> <title> <%=rm.GetString(Utility.siteletTitle)%> </title> <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css"> </HEAD> <body MS_POSITIONING="GridLayout"> <DIV CLASS="Heading"> <%= rm.GetString(Utility.siteletTitle)%> </DIV> <BR> <DIV CLASS="H1"> <%= rm.GetString(Utility.siteletSubTitle)%> </DIV> <BR> <form id="Languages" method="post" runat="server"> <UL> <LI> <asp:Hyperlink id="English" Text="English" runat="server" /> </LI> <LI> <asp:Hyperlink id="German" Text="German" runat="server" /> </LI> <LI> <asp:Hyperlink id="French" Text="French" runat="server" /> </LI> <LI> <asp:Hyperlink id="Japanese" Text="Japanese" runat="server" /> </LI> </UL> </form> </body> </HTML>
<%@Import Namespace="System.Globalization"%> <%@Import Namespace="System.Resources"%> <%@Import Namespace="catalogsitelet" %> <%@ Control %> <!--------------------------------------------------------------------- -- File: footer.ascx -- -- Summary: Footer control -- -- Sample: Catalog Sitelet -- ----------------------------------------------------------------------- -- This file is part of the Microsoft Commerce Server 2002 SDK -- -- Copyright (C) 2002 Microsoft Corporation. All rights reserved. -- -- This source code is intended only as a supplement to Microsoft -- Commerce Server 2002 and/or on-line documentation. See these other -- materials for detailed information regarding Microsoft code samples. -- -- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -- PARTICULAR PURPOSE. ----------------------------------------------------------------------> <script runat="server" language="VB"> Private strLanguage As String = Nothing Protected Overloads Overrides Sub Render(ByVal writer As HtmlTextWriter) Dim rmgr As ResourceManager = ResourceFactory.RManager If Nothing = strLanguage OrElse "" = strLanguage.Trim Then strLanguage = Utility.englishLanguage End If Home.Text = rmgr.GetString("L_HTMLURLText_Home") Browse.Text = rmgr.GetString("L_HTMLURLText_Footer_Browse") FTSearch.Text = rmgr.GetString("L_HTMLURLText_Footer_FTSearch") PropSearch.Text = rmgr.GetString("L_HTMLURLText_Footer_PropSearch") Home.NavigateUrl = rmgr.GetString(Utility.homePageUrl) Browse.NavigateUrl = rmgr.GetString(Utility.browsePageUrl) & "?" & Utility.languageLabel & "=" & strLanguage FTSearch.NavigateUrl = rmgr.GetString(Utility.ftSearchPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage PropSearch.NavigateUrl = rmgr.GetString(Utility.propSearchPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage MyBase.Render(writer) End Sub Public Property Language() As String Get Return strLanguage End Get Set strLanguage = value End Set End Property </script> <asp:Panel runat="server"> <BR> <asp:Hyperlink id="Home" Text="Home" runat="server" /> | <asp:Hyperlink id="Browse" Text="Browse" runat="server" /> | <asp:Hyperlink id="FTSearch" Text="Full Text Search" runat="server" /> | <asp:Hyperlink id="PropSearch" Text="Property Search" runat="server" /> </asp:Panel>
Ftsearch.aspx
<%@ Page Description="Localized Page" CodePage="65001" %> <%@Import Namespace="System.Globalization"%> <%@Import Namespace="System.Resources"%> <%@Import Namespace="System.Threading"%> <%@Import Namespace="System.Data"%> <%@Import Namespace="catalogsitelet"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%> <%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %> <!--------------------------------------------------------------------- -- File: ftsearch.aspx -- -- Summary: Page performs free text search and displays the result -- -- Sample: Catalog Sitelet -- ----------------------------------------------------------------------- -- This file is part of the Microsoft Commerce Server 2002 SDK -- -- Copyright (C) 2002 Microsoft Corporation. All rights reserved. -- -- This source code is intended only as a supplement to Microsoft -- Commerce Server 2002 and/or on-line documentation. See these other -- materials for detailed information regarding Microsoft code samples. -- -- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -- PARTICULAR PURPOSE. ----------------------------------------------------------------------> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="VB"> <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script runat="Server" Language="VB"> Private rm As ResourceManager Private strLanguage As String = Nothing Private catDisplayName As String = Nothing Private searchText As String = Nothing Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 'Get the ResourceManager from the Application object rm = ResourceFactory.RManager If rm Is Nothing Then 'Resources are unavailable Server.Transfer(Utility.errorPage) End If End Sub Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) Dim SelectedCulture As CultureInfo Dim coll As NameValueCollection = Request.QueryString strLanguage = coll(Utility.languageLabel) Try SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) Catch e As Exception 'Fallback to English language SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) strLanguage = Utility.englishLanguage End Try 'Set Language on footer control Footer.Language = strLanguage 'Set culture for current thread If Not (SelectedCulture Is Nothing) Then Thread.CurrentThread.CurrentCulture = SelectedCulture Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture End If 'Initialize controls with appropriate texts Search.Text = rm.GetString(Utility.ftSearchSearch) 'Get display name for catalog, write a function catDisplayName = Utility.GetDisplayName(Utility.catalogName, strLanguage) End Sub Sub SearchButton_Click(ByVal sender As Object, ByVal args As EventArgs) Try Dim totalRecords As Integer = 0 Dim startPage As Integer = 1 searchText = txtSearchText.Text If searchText.Trim = "" Then Return End If Dim catalogCtx As CatalogContext = CommerceContext.Current.CatalogSystem Dim searchResult As DataSet = FreeTextSearch(searchText, startPage, totalRecords) If 0 < searchResult.Tables(0).Rows.Count Then rptSearchResult.Visible = True rptSearchResult.DataSource = searchResult rptSearchResult.DataBind Matches.Text = totalRecords.ToString & " " & rm.GetString(Utility.ftSearchTotal) Else rptSearchResult.Visible = False Seprator.InnerHtml = Nothing Pages.Text = Nothing Matches.Text = Nothing End If 'Do paging Paging.Visible = False If totalRecords > Utility.numberOfRecordToDisplay Then Dim pagingTable As DataTable = Utility.DoPaging(totalRecords, Utility.numberOfRecordToDisplay, searchText) Paging.DataSource = pagingTable.DefaultView Paging.DataBind Paging.Visible = True Seprator.InnerHtml = "<BR>" Pages.Text = rm.GetString(Utility.ftSearchPage) End If Catch e As Exception 'Eat exception End Try End Sub 'Page click response Sub PageClick_ItemCommand(ByVal sender As Object, ByVal args As RepeaterCommandEventArgs) Dim searchClause As String = CType(args.CommandArgument, String) Dim totalRecords As Integer = 0 Dim page As Integer = args.Item.ItemIndex + 1 Dim searchResult As DataSet = FreeTextSearch(searchText, page, totalRecords) 'If products found If 0 < searchResult.Tables(0).Rows.Count Then rptSearchResult.Visible = True rptSearchResult.DataSource = searchResult rptSearchResult.DataBind Seprator.InnerHtml = "<BR>" Pages.Text = rm.GetString(Utility.ftSearchPage) Matches.Text = totalRecords.ToString & " " & rm.GetString(Utility.ftSearchTotal) Else rptSearchResult.Visible = False Seprator.InnerHtml = Nothing Pages.Text = Nothing End If End Sub Function FreeTextSearch(ByVal searchstring As String, ByVal page As Integer, ByRef totalRecords As Integer) As DataSet 'Search Options Dim searchOptions As CatalogSearchOptions = Utility.SetSearchOptions(page, Utility.numberOfRecordToDisplay, "name") 'Look for the products supporting search criteria Dim search As CatalogSearch = New CatalogSearch(CommerceContext.Current.CatalogSystem) search.CatalogNames = Utility.catalogName search.FreeTextSearchPhrase = searchstring search.SearchOptions = searchOptions Return search.Search(totalRecords) End Function Sub ProductListing_ItemCommand(ByVal sender As Object, ByVal args As RepeaterCommandEventArgs) Response.Redirect(rm.GetString(Utility.productPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage & "&" & Utility.productID & "=" & CType(args.CommandArgument, String)) End Sub </script> <title> <%=rm.GetString(Utility.ftPageTitle) & " " & catDisplayName%> </title> <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css"> </HEAD> <body> <DIV CLASS="Heading"> <%= rm.GetString(Utility.ftPageTitle) & " " & catDisplayName%> </DIV> <form id="ftsearch" method="post" runat="server"> <asp:TextBox id="txtSearchText" runat="server"></asp:TextBox> <input type=text style="visibility:hidden" runat="server"/> <BR> <asp:Button id="Search" runat="server" Text="Search" OnClick="SearchButton_Click"></asp:Button> <br> <br> <asp:Label id="Matches" runat="server" /> <br> <br> <asp:Repeater id="rptSearchResult" OnItemCommand="ProductListing_ItemCommand" runat="server"> <ItemTemplate> <asp:LinkButton id="SelectProductBtn" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("ProductID") %>' runat="server"> <%# DataBinder.Eval(Container.DataItem, "Name") %> </asp:LinkButton> ( <asp:Label id="Describe" runat="server"> <%# DataBinder.Eval(Container.DataItem, "description") %> </asp:Label> ) </ItemTemplate> <SeparatorTemplate> <BR> <br> </SeparatorTemplate> </asp:Repeater> <DIV id="Seprator" runat="server" /> <asp:Label id="Pages" runat="server" /> <asp:Repeater id="Paging" OnItemCommand="PageClick_ItemCommand" runat="server"> <ItemTemplate> <asp:LinkButton id="PageClick" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("Clause") %>' runat="server"> <%# DataBinder.Eval(Container.DataItem, "Page") %> </asp:LinkButton> </ItemTemplate> </asp:Repeater> <Localized:Footer runat="server" id="Footer" /> </form> </body> </HTML>
Global.ascx
<%@Import namespace="System"%> <%@Import namespace="System.Collections"%> <%@Import namespace="System.ComponentModel"%> <%@Import namespace="System.Web"%> <%@Import namespace="System.Web.SessionState"%> <%@Import namespace="Microsoft.CommerceServer.Runtime"%> <%@Import namespace="System.IO"%> <%@Import namespace="System.Resources"%> <%@Import namespace="System.Threading"%> <%@Import namespace="System.Globalization"%> <script runat="server" language="VB"> Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) End Sub Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) End Sub Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) End Sub Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs) End Sub Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) End Sub Sub InitializeComponent() End Sub Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) End Sub </script>
Main.aspx
<%@Page Description="Localized Page" CodePage="65001" %> <%@Import Namespace="catalogsitelet"%> <%@Import Namespace="System.Resources"%> <%@Import Namespace="System.Threading"%> <%@Import Namespace="System.Globalization"%> <%@Import Namespace="System.Data"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%> <%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %> <!--------------------------------------------------------------------- -- File: main.aspx -- -- Summary: Main selection page for Catalog Sitelet -- -- Sample: Catalog Sitelet -- ----------------------------------------------------------------------- -- This file is part of the Microsoft Commerce Server 2002 SDK -- -- Copyright (C) 2002 Microsoft Corporation. All rights reserved. -- -- This source code is intended only as a supplement to Microsoft -- Commerce Server 2002 and/or on-line documentation. See these other -- materials for detailed information regarding Microsoft code samples. -- -- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -- PARTICULAR PURPOSE. ----------------------------------------------------------------------> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="VB"> <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script runat="Server" Language="VB"> Private rm As ResourceManager Private strLanguage As String = Nothing Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 'Get the ResourceManager from the Application object rm = ResourceFactory.RManager If rm Is Nothing Then 'Resources are unavailable Server.Transfer(Utility.errorPage) End If End Sub Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) Dim SelectedCulture As CultureInfo Dim coll As NameValueCollection = Request.QueryString strLanguage = coll(Utility.languageLabel) Try SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) Catch e As Exception SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) strLanguage = Utility.englishLanguage End Try Footer.Language = strLanguage If Not (SelectedCulture Is Nothing) Then Thread.CurrentThread.CurrentCulture = SelectedCulture Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture End If If Not IsPostBack Then BrowseCat.Text = rm.GetString(Utility.browsePageLabel) FullTextSearch.Text = rm.GetString(Utility.ftSearchLabel) PropertySearch.Text = rm.GetString(Utility.propSearchLabel) BrowseCat.NavigateUrl = rm.GetString(Utility.browsePageUrl) & "?" & Utility.languageLabel & "=" & strLanguage FullTextSearch.NavigateUrl = rm.GetString(Utility.ftSearchPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage PropertySearch.NavigateUrl = rm.GetString(Utility.propSearchPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage End If End Sub </script> <title> <%=rm.GetString(Utility.pageTitle)%> </title> <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css"> </HEAD> <body> <DIV CLASS="Heading"> <%= rm.GetString(Utility.pageTitle)%> </DIV> <BR> <BR> <form id="main" method="post" runat="server"> <ul> <li> <asp:Hyperlink id="BrowseCat" Text="Browse the Catalog" runat="server" /> </li> <li> <asp:Hyperlink id="FullTextSearch" Text="Perform a Full Text Search" runat="server" /> </li> <li> <asp:Hyperlink id="PropertySearch" Text="Perform a Property Search" runat="server" /> </li> </ul> <Localized:Footer runat="Server" ID="Footer" /> </form> </body> </HTML>
Noresource.aspx
<%@ Page %> <!--------------------------------------------------------------------- -- File: noresource.aspx -- -- Summary: Shown when no resource manager found -- -- Sample: Catalog Sitelet -- ----------------------------------------------------------------------- -- This file is part of the Microsoft Commerce Server 2002 SDK -- -- Copyright (C) 2002 Microsoft Corporation. All rights reserved. -- -- This source code is intended only as a supplement to Microsoft -- Commerce Server 2002 and/or on-line documentation. See these other -- materials for detailed information regarding Microsoft code samples. -- -- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -- PARTICULAR PURPOSE. ----------------------------------------------------------------------> <html> <head> <title>Server Error</title> </head> <body> <h1>Server Error</h1> Localized resources were not available.<p> Please contact the administrator. </body> </html>
Product.aspx
<%@ Page Description="Localized Page" CodePage="65001" %> <%@Import Namespace="System.Globalization"%> <%@Import Namespace="System.Resources"%> <%@Import Namespace="System.Threading"%> <%@Import Namespace="System"%> <%@Import Namespace="catalogsitelet"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%> <%@Import Namespace="System.Data"%> <%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %> <!--------------------------------------------------------------------- -- File: product.aspx -- -- Summary: Page is used to display product details -- -- Sample: Catalog Sitelet -- ----------------------------------------------------------------------- -- This file is part of the Microsoft Commerce Server 2002 SDK -- -- Copyright (C) 2002 Microsoft Corporation. All rights reserved. -- -- This source code is intended only as a supplement to Microsoft -- Commerce Server 2002 and/or on-line documentation. See these other -- materials for detailed information regarding Microsoft code samples. -- -- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -- PARTICULAR PURPOSE. ----------------------------------------------------------------------> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="VB"> <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script runat="Server" Language="VB"> Private rm As ResourceManager Private strLanguage As String = Nothing Private catalog As ProductCatalog = Nothing Private productdt As DataRow = Nothing Private productDisplayName As String = Nothing Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 'ResourceManager from the Application object rm = ResourceFactory.RManager catalog = CommerceContext.Current.CatalogSystem.GetCatalog(Utility.catalogName) If rm Is Nothing Then 'Resources are unavailable Server.Transfer(Utility.errorPage) End If End Sub Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) Dim SelectedCulture As CultureInfo Dim coll As NameValueCollection = Request.QueryString strLanguage = coll(Utility.languageLabel) Try SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) Catch e As Exception SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) strLanguage = Utility.englishLanguage End Try Footer.Language = strLanguage catalog.ActiveLanguage = strLanguage If Not (SelectedCulture Is Nothing) Then Thread.CurrentThread.CurrentCulture = SelectedCulture Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture End If Dim productid As String = coll(Utility.productID) If Not IsPostBack AndAlso Not (productid Is Nothing) Then Try Dim myProduct As Product = catalog.GetProduct(productid) Dim data As DataSet = myProduct.GetProductProperties productdt = data.Tables(0).Rows(0) Try productDisplayName = CType(productdt("name"), String) Catch e As Exception productDisplayName = "" End Try Try ProductImage.ImageUrl = CType(productdt("Image_filename"), String) Catch e As Exception ProductImage.ImageUrl = Nothing End Try Try ProductIDLabel.Text = CType(productdt("name"), String) Catch e As Exception ProductIDLabel.Text = Nothing End Try Try IntroDateLabel.Text = rm.GetString(Utility.productPageIntro) Dim dateTime As DateTime = CType(productdt("IntroductionDate"), DateTime) IntroDate.Text = dateTime.ToShortDateString Catch e As Exception IntroDateLabel.Text = Nothing End Try Try PriceLabel.Text = rm.GetString(Utility.productPagePrice) Price.Text = "$" & productdt("cy_list_price").ToString Catch e As Exception PriceLabel.Text = Nothing End Try Try ProductCodeLabel.Text = rm.GetString(Utility.productPageCode) ProductCode.Text = productdt("ProductCode").ToString Catch e As Exception ProductCodeLabel.Text = Nothing End Try Try Dim variantData As DataSet = myProduct.GetVariants VariantListing.DataSource = variantData VariantListing.DataBind If Not (0 = variantData.Tables(0).Rows.Count) Then Variants.Text = rm.GetString(Utility.productPageColor) Else Variants.Text = Nothing End If Catch e As Exception Variants.Text = Nothing End Try Try DescribeLabel.Text = rm.GetString(Utility.productPageDescription) Description.Text = CType(productdt("Description"), String) Catch e As Exception DescribeLabel.Text = Nothing End Try Try Size.Text = CType(productdt("ProductSize").ToString, String) If Not ("" = Size.Text.Trim) Then SizeLabel.Text = rm.GetString(Utility.productPageSize) End If Catch e As Exception SizeLabel.Text = Nothing End Try Try Dim available As Integer = CType(productdt("OnSale"), Integer) If 1 = available Then AvailableLabel.Text = rm.GetString(Utility.productPageAvailable) Else AvailableLabel.Text = rm.GetString(Utility.productPageUnavailable) End If Catch e As Exception AvailableLabel.Text = Nothing End Try Catch e As Exception 'Eat exception End Try End If End Sub </script> <title> <%=rm.GetString(Utility.productPageTitle) & " " & productDisplayName%> </title> <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css"> </HEAD> <body> <DIV CLASS="Heading"> <%= rm.GetString(Utility.productPageTitle) & " " & productDisplayName%> </DIV> <BR> <BR> <form id="Productform" method="post" runat="server"> <asp:Table id="Product" runat="server" Width="50%" cellpadding="2" cellspacing="0" Height="175px"> <asp:TableRow> <asp:TableCell ColumnSpan="100"> <B> <asp:Label ID="ProductIDLabel" Runat="server" /> </B> <br> <asp:Label ID="IntroDateLabel" Runat="server" /> <asp:Label ID="IntroDate" Runat="server" /> <br> </asp:TableCell> </asp:TableRow> <asp:TableRow> <asp:TableCell ColumnSpan="70"> <asp:Image id="ProductImage" runat="server"></asp:Image> </asp:TableCell> <asp:TableCell ColumnSpan="30"> <b> <asp:Label ID="PriceLabel" Runat="server" /> </b> <asp:Label ID="Price" Runat="server" /> <br> <b> <asp:Label ID="ProductCodeLabel" Runat="server" /> </b> <asp:Label ID="ProductCode" Runat="server" /> <br> </asp:TableCell> </asp:TableRow> <asp:TableRow> <asp:TableCell ColumnSpan="100"> <B> <asp:Label ID="Variants" Runat="server" /> </B> <br> <asp:Repeater id="VariantListing" runat="server"> <ItemTemplate> <asp:Label id="Color" runat="server"> <%# DataBinder.Eval(Container.DataItem, "ProductColor") %> </asp:Label> </ItemTemplate> <SeparatorTemplate> <BR> </SeparatorTemplate> </asp:Repeater> <BR> </asp:TableCell> </asp:TableRow> <asp:TableRow> <asp:TableCell ColumnSpan="100"> <B> <asp:Label ID="DescribeLabel" Runat="server" /> </B> <BR> <asp:Label ID="Description" Runat="server" /> <BR> </asp:TableCell> </asp:TableRow> <asp:TableRow> <asp:TableCell ColumnSpan="100"> <B> <asp:Label ID="SizeLabel" Runat="server" /> </B> <asp:Label ID="Size" Runat="server" /> <BR> </asp:TableCell> </asp:TableRow> </asp:Table> <asp:Label ID="AvailableLabel" Runat="server" /> <Localized:Footer runat="server" id="Footer" /> </form> </body> </HTML>
Propsearch.aspx
<%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %> <%@Import Namespace="System.Data"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%> <%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%> <%@Import Namespace="catalogsitelet"%> <%@Import Namespace="System.Threading"%> <%@Import Namespace="System.Resources"%> <%@Import Namespace="System.Globalization"%> <%@ Page Description="Localized Page" CodePage="65001" %> <!--------------------------------------------------------------------- -- File: propsearch.aspx -- -- Summary: Page performs property search and displays the result -- -- Sample: Catalog Sitelet -- ----------------------------------------------------------------------- -- This file is part of the Microsoft Commerce Server 2002 SDK -- -- Copyright (C) 2002 Microsoft Corporation. All rights reserved. -- -- This source code is intended only as a supplement to Microsoft -- Commerce Server 2002 and/or on-line documentation. See these other -- materials for detailed information regarding Microsoft code samples. -- -- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -- PARTICULAR PURPOSE. ----------------------------------------------------------------------> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="VB"> <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script runat="Server" Language="VB"> Private rm As ResourceManager Private strLanguage As String = Nothing Private catDisplayName As String = Nothing Private productCode As String = Nothing Private introductionDate As String = Nothing Private productName As String = Nothing Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 'Get the ResourceManager from the Application object rm = ResourceFactory.RManager If rm Is Nothing Then 'Do something sensible if resources are unavailable Server.Transfer(Utility.errorPage) End If End Sub Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) Dim SelectedCulture As CultureInfo Dim coll As NameValueCollection = Request.QueryString strLanguage = coll(Utility.languageLabel) Try SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) Catch e As Exception 'Fallback to English language SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) strLanguage = Utility.englishLanguage End Try 'Set Language on footer control Footer.Language = strLanguage 'Set culture for current thread If Not (SelectedCulture Is Nothing) Then Thread.CurrentThread.CurrentCulture = SelectedCulture Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture End If 'Initialize controls with appropriate texts ProdCode.Text = rm.GetString(Utility.productPageCode) IntroDate.Text = rm.GetString(Utility.propSearchIntro) Name.Text = rm.GetString(Utility.propSearchTitle) Button.Text = rm.GetString(Utility.ftSearchSearch) catDisplayName = Utility.GetDisplayName(Utility.catalogName, strLanguage) End Sub Sub Button_Click(ByVal sender As Object, ByVal args As EventArgs) Dim searchClause As String = Nothing Try 'To keep count of records found Dim totalRecords As Integer = 0 Dim startPage As Integer = 1 'Product code productCode = ProdCodeText.Text.Trim If Not ("" = productCode) Then BuildClause(searchClause, "productcode", productCode, False) End If 'Introduction date introductionDate = IntroDateText.Text.Trim If Not ("" = introductionDate) Then BuildClause(searchClause, "introductiondate", introductionDate, True) End If 'Product name productName = NameText.Text.Trim If Not ("" = productName) Then BuildClause(searchClause, "name", productName, False) End If Dim searchResult As DataSet = PropertySearch(searchClause, startPage, totalRecords) Paging.Visible = False 'If products found If Not (searchResult Is Nothing) AndAlso 0 < searchResult.Tables(0).Rows.Count Then SearchResultRepeater.Visible = True SearchResultRepeater.DataSource = searchResult SearchResultRepeater.DataBind Matches.Text = totalRecords.ToString & " " & rm.GetString(Utility.propSearchTotal) Else SearchResultRepeater.Visible = False Seprator.InnerHtml = Nothing Pages.Text = Nothing Matches.Text = Nothing End If 'Do paging If totalRecords > Utility.numberOfRecordToDisplay Then Dim pagingTable As DataTable = Utility.DoPaging(totalRecords, Utility.numberOfRecordToDisplay, searchClause) Paging.DataSource = pagingTable.DefaultView Paging.DataBind Paging.Visible = True Seprator.InnerHtml = "<BR>" Pages.Text = rm.GetString(Utility.ftSearchPage) End If ProdCodeText.Text = Nothing IntroDateText.Text = Nothing NameText.Text = Nothing Catch e As Exception 'Eat exception End Try End Sub 'Redirects to product page Sub ProductListing_ItemCommand(ByVal sender As Object, ByVal args As RepeaterCommandEventArgs) Response.Redirect(rm.GetString(Utility.productPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage & "&" & Utility.productID & "=" & CType(args.CommandArgument, String)) End Sub 'Page click response Sub PageClick_ItemCommand(ByVal sender As Object, ByVal args As RepeaterCommandEventArgs) Dim searchClause As String = CType(args.CommandArgument, String) Dim totalRecords As Integer = 0 Dim page As Integer = args.Item.ItemIndex + 1 Dim searchResult As DataSet = PropertySearch(searchClause, page, totalRecords) 'If products found If 0 < searchResult.Tables(0).Rows.Count Then SearchResultRepeater.Visible = True SearchResultRepeater.DataSource = searchResult SearchResultRepeater.DataBind Seprator.InnerHtml = "<BR>" Pages.Text = rm.GetString("L_Page_FTSearch_Page") Matches.Text = totalRecords.ToString & " " & rm.GetString(Utility.propSearchTotal) Else SearchResultRepeater.Visible = False Seprator.InnerHtml = Nothing Pages.Text = Nothing End If End Sub 'Creates Where clause for SQL statement Public Sub BuildClause(ByRef searchCaluse As String, ByVal sKey As String, ByVal sValue As String, ByVal bEquals As Boolean) If bEquals Then If searchCaluse Is Nothing Then searchCaluse = sKey & " = N" & "'" & sValue & "'" Else searchCaluse = searchCaluse & " or " & sKey & " = N" & "'" & sValue & "'" End If Else If searchCaluse Is Nothing Then searchCaluse = sKey & " like N" & "'" & sValue & "'" Else searchCaluse = searchCaluse & " or " & sKey & " like N" & "'" & sValue & "'" End If End If End Sub Function PropertySearch(ByVal searchstring As String, ByVal page As Integer, ByRef totalRecords As Integer) As DataSet 'Search Options Dim searchOptions As CatalogSearchOptions = Utility.SetSearchOptions(page, Utility.numberOfRecordToDisplay, "name") 'Look for the products supporting search criteria Dim search As CatalogSearch = New CatalogSearch(CommerceContext.Current.CatalogSystem) search.CatalogNames = Utility.catalogName search.SqlWhereClause = searchstring search.SearchOptions = searchOptions Return search.Search(totalRecords) End Function </script> <title> <%=rm.GetString(Utility.propPageTitle) & " " & catDisplayName%> </title> <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css"> </HEAD> <body> <DIV CLASS="Heading"> <%= rm.GetString(Utility.propPageTitle) & " " & catDisplayName%> </DIV> <form id="propSearch" method="post" runat="server"> <BR> <asp:Table id="display" runat="server"> <asp:TableRow> <asp:TableCell> <asp:Label id="ProdCode" runat="server">Product Code:</asp:Label> </asp:TableCell> <asp:TableCell> <asp:TextBox id="ProdCodeText" runat="server"></asp:TextBox> </asp:TableCell> </asp:TableRow> <asp:TableRow> <asp:TableCell> <asp:Label id="IntroDate" runat="server">Introduction date:</asp:Label> </asp:TableCell> <asp:TableCell> <asp:TextBox id="IntroDateText" runat="server"></asp:TextBox> </asp:TableCell> </asp:TableRow> <asp:TableRow> <asp:TableCell> <asp:Label id="Name" runat="server">Name:</asp:Label> </asp:TableCell> <asp:TableCell> <asp:TextBox id="NameText" runat="server"></asp:TextBox> </asp:TableCell> </asp:TableRow> </asp:Table> <asp:Button id="Button" runat="server" Text="Button" OnClick="Button_Click" /> <br> <br> <asp:Label id="Matches" runat="server" /> <br> <br> <asp:Repeater id="SearchResultRepeater" OnItemCommand="ProductListing_ItemCommand" runat="server"> <ItemTemplate> <asp:LinkButton id="SelectProductBtn" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("ProductID") %>' runat="server"> <%# DataBinder.Eval(Container.DataItem, "Name") %> </asp:LinkButton> ( <asp:Label id="Describe" runat="server"> <%# DataBinder.Eval(Container.DataItem, "description") %> </asp:Label> ) </ItemTemplate> <SeparatorTemplate> <BR> <BR> </SeparatorTemplate> </asp:Repeater> <DIV id="Seprator" runat="server" /> <asp:Label id="Pages" runat="server" /> <asp:Repeater id="Paging" OnItemCommand="PageClick_ItemCommand" runat="server"> <ItemTemplate> <asp:LinkButton id="PageClick" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("Clause") %>' runat="server"> <%# DataBinder.Eval(Container.DataItem, "Page") %> </asp:LinkButton> </ItemTemplate> </asp:Repeater> <Localized:Footer runat="server" id="Footer" /> </form> </body> </HTML>
REFERENCES
For more information about the ASP.NET-based Catalog Sitelet, visit the following Microsoft Developer Network (MSDN) Web site:
Keywords: kbprogramming kbinfo kbhowto kbcode KB910309