Assignment 6 -- Music Store default, search and product pages
The goal of the music store project is to solidify your knowledge of ASP.NET and
to provide you a significant item to add to your online portfolio. The project:
- built entirely using in ASP.NET,
- product information obtained from Amazon Product Advertising API (application interface),
- all database access via data layer,
- masterpages used to eliminate duplicate page layout code,
- business layer
- shopping cart uses database to store items
To keep files organized it is a good idea to put images and include files in subfolders.
This keeps the number of files in the main application directory from growing out
of control. A recommended directory structure for your music store:
-Root Folder (i.e. 131SmithB)
-controls (for your .ascx files)
-images (for logo, icons, etc.)
MasterPage.master - Create a master page that defines the
page layout, including the header, footer, search/browse
menu and page content. Create a store name and a custom logo. User controls that
are used in the master page (header, menu, etc.) are declared in the master page.
The browse menu should pass a styleID for each category, as shown on the sample
site (default.aspx). The Music
store database uses Amazon's style IDs which will be used in conjunction with Amazon
web services on the SearchBrowse page. The sample also passes the style name which
it displays on the search/browse page.
Enhancements: the sample site contains several enhancements that
are not required. Enhancements displayed on the sample site are:
- graphics upgrade
- right-column features: cart info, best sellers, visited pages
- SearchBrowse page: sorting, paging
- Product page: tracks, customer reviews, product recommendations
- Checkout: city/zip database validation.
You may wish to add some of these enhancements to your site for the final project
but they are not required on the assignments.
- This page displays a few randomly selected items from the database. Steps:
Create the page using VWD. In the "Add New Item" dialogue box check the box "Select
master page." Test the page with some static text inside the "<asp:Content" tags.
Use a DataList to display a few random CD's from the database in default.aspx. SeachBrowse.aspx
from assignment 5 is a good template. Add a new method named "SelectRandom()"
to dbMusicStoreSample2008.cs. The sql looks like this:
SELECT TOP 4 ASIN, Title, Artist, Price, Review
ORDER BY NEWID()
Some of ASINs stored in the database have extra spaces at the beginning or end
that can cause problems displaying images. Use the string object's Trim()
method to trim off the extra
<%# Eval("ASIN").ToString().Trim() %>
The editorial description may be too long for the default page. Truncate the description
using a function as shown in
AmazonSearchSample.aspx.txt (view source).
- This page uses Amazon's Product Advertising API to retrieve product information
from Amazon's massive product database. It is used to display both search and browse
Amazon web services requries a developer key. You may use Prof. Sandvigs
(included in the code) or go to Amazon's Product Advertising API page and sign up for for
your own (they are free).
Add classes to your application:
- Add a reference to Amazon web services to your application WebReference folder.
Add the web reference in VWD by right clicking on your application root (C:\....)
and selecting "Add Web Reference." Paste in the following URL, name the web reference
"Amazon2012" and click Add Reference. This creates classes in your application that
are a "proxy" for Amazon's API. These new classes are visible with Intellisense.
- VS will add a new folder "App_WebReferences" to your application.
- Note: the web reference must be named "Amazon2012" to work properly with the sample
- Amazon's web service also requires that three additional classes be added to your
application. Unzip the files AmazonWebServiceFiles.zip and add the three .cs files to
your App_code folder.
- Amazon's new security policy uses features from Microsoft's Web Service Enhancements
which are not part of the standard .NET installation. The enhancements can be added
to your Visual Studio application by adding the Bin folder from the zip in your
application root directory. The Bin (binary) folder contains a file named Microsoft.Web.Services3.dll.
- The Bin folder does not need to be uploaded to the Yorktown server since this feature
is already installed.
- One of the three .cs files you added to your App_Code folder is named AmazonWebService.cs.
This class acts as an intermediary between Amazon's complex classes and your .aspx
pages. Its job is to hide the complexity of Amazon's classes and expose only the
features that are needed for this project. The advantages of this approach are:
- Amazon's services are used on two pages (SearchBrowse and Product) and the class
eliminates the need to repeat the Amazon's code on both pages
- Amazon's classes are rather complicated and include many features that we won't
use. Putting Amazons' classes behind a new class hides this complexity.
- Add your Amazon ID and secret key to AmazonWebService.cs
- Copy and modify
- The sample shows how to retrieve product information using the AmazonWebService
- Copy this code to your application and it should run.
- If you receive an error about missing an assembly reference to Microsoft.Web.Service3
it means that .NET cannot find the .dll file inside the bin folder. Make sure that
you put the Bin folder in your application root folder.
- Modify the sample page to work with your masterpage.
- Modify the sample code to retrieve search information from the querystring and
feed it into the web service.
- Once you have search working modify your page to search by style.
- Use a "if else" statement to determine if the parameters in the querystring are
requesting a KeyWord search or a BrowseNode search. Insert the appropriate parameters
into the search.
- Keyword search should like similar to this:
dsResults = myAWS.AmazonSearch("keywords", "floyd", "1", "salesrank", "Music");
- BrowseNode should look similar to this:
dsResults = myAWS.AmazonSearch("BrowseNode", "30", "1", "salesrank", "Music");
- Some of Amazon's product descriptions include HTML tags (tables, images, etc).
These can cause problems when you truncate the descriptions since it may leave opening
tags without closing tags. The solution is to use regular expressions to remove
the tags with Regex.Replace(). If you have started a Utilities class a function
something like "StripHTMLTags()" would be a usful addition.
- Paging and sorting are not required but are nice enhancements.
- Helpful documentation on Amazon E-Commerce Web Services:
- This page is very similar to SearchBrowse.aspx. It retrieves the item's ASIN from
the querystring and performs a keyword search using the ASIN. Steps:
- Use SearchBrowse.aspx as a template.
- Display the additional fields shown in the sample. (note: AmazonService returns
NumberOfTracks but this field is rarely populated.)
- Display Amazon's medium sized image (see image properties on the sample site for
src). Clicking on the image should display the large size image (example).
The sample site uses LightBox to display the large image (this is an enhancement
and not required).
- Amazon provides price in cents (i.e. $14.95 is provided as 1495). Use the function
"FormatCurrency" provided in AmazonSearchSample.aspx to reformat the currency.
- Release date is returned as a string in the format "2007-09-18". There are two
ways to make this more readable. The first is to use the string object's substring
method to rearrange the string to something like "09-18-2007" The second and more
elegant way is to parse out the year, month and day to populate a DateTime object
(i.e. DateTime(year, month, day)). The DateTime object provides many tools for working
with dates, including formatting options. Its ToString() method can be used to output
the date in a format such as "September 18, 2007" (DateTime
Format documentation). Using the second method is considered to be a small
extra-credit enhancement on the final project.
- Descriptive page titles are important for search engines and for tabbed browsing.
Add the title and artist to the page title with code similar to:
string ProductTitle = dsProduct.Tables.Rows["title"].ToString();
string artist = dsProduct.Tables.Rows["artist"].ToString();
Page.Title = ProductTitle + " by " + artist + " - Music sample site";
- Amazon's web service provides many additional data fields. Displaying additional
fields, such as tracks, reviews, label, sales rank etc. is not required but are
considered to be enhancements. AmazonService.cs must be modified to return these
To submit your assignment for grading send an email with the URLs for your assignment
- Professor Sandvig and the TA at
(note: this address is for homework assignments only. Please send correspondence
- cc. a copy to yourself
The subject line of your email should read "MIS324 AXX YourName"
where XX is the assignment number. Please check that your URLs are correct before
submitting them for grading. Files with incorrect URLs will not be graded.
When pages are connected via navigation (as in your Music store project) it is only
necessary to submit the URL of the first page.