ASP.NET MVC3 Music Store with Mockjax
by Elijah Manor
HTML
<script src="https://github.com/appendto/jquery-mockjax/raw/master/jquery.mockjax.js"></script>
<div id="header">
<h1><a href="/">ASP.NET MVC MUSIC STORE</a></h1>
<ul id="navlist">
<li class="first"><a href="/" id="current">Home</a></li>
<li><a href="/Store/">Store</a></li>
<li><a href="/ShoppingCart?Length=12" id="cart-status">Cart (13)</a></li>
<li><a href="/StoreManager/">Admin</a></li>
</ul>
</div>
<ul id="categories">
<li><a href="/Store/Browse?Genre=Rock">Rock</a>
</li>
<li><a href="/Store/Browse?Genre=Jazz">Jazz</a>
</li>
<li><a href="/Store/Browse?Genre=Metal">Metal</a>
</li>
<li><a href="/Store/Browse?Genre=Alternative">Alternative</a>
</li>
<li><a href="/Store/Browse?Genre=Disco">Disco</a>
</li>
<li><a href="/Store/Browse?Genre=Blues">Blues</a>
</li>
<li><a href="/Store/Browse?Genre=Latin">Latin</a>
</li>
<li><a href="/Store/Browse?Genre=Reggae">Reggae</a>
</li>
<li><a href="/Store/Browse?Genre=Pop">Pop</a>
</li>
<li><a href="/Store/Browse?Genre=Classical">Classical</a>
</li>
</ul>
<div id="main">
<h3>
<em>Review</em> your cart:
</h3>
<p class="button">
<a href="/Checkout/AddressAndPayment">Checkout >></a>
</p>
<div id="update-message">
</div>
<table>
<tr>
<th>
Album Name
</th>
<th>
Price (each)
</th>
<th>
Quantity
</th>
<th></th>
</tr>
<tr id="row-1">
<td>
<a href="/Store/Details/7">Nevermind</a>
</td>
<td>
8.99
</td>
<td id="item-count-1">
4
</td>
<td>
<a href="#" class="RemoveLink" data-id="1">Remove from cart</a>
</td>
</tr>
<tr id="row-2">
...
CSS
*
{
margin: 0px;
padding: 0px;
border: none;
}
body
{
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
background-color: #FBF9EF;
padding: 0px 6%;
}
#container
{
float: left;
}
#header
{
float: left;
width: 100%;
border-bottom: 1px dotted #5D5A53;
margin-bottom: 10px;
}
#header h1
{
font-size: 18px;
float: left;
background: url(/content/Images/logo.png) no-repeat;
padding: 45px 0px 5px 0px;
}
#promotion
{
height: 300px;
width: 700px;
background: url(/content/Images/home-showcase.png) no-repeat;
}
ul li a
{
font-size: 16px;
}
#main
{
overflow: hidden;
padding: 0 0 15px 10px;
}
ul
{
list-style-type: square;
margin-left: 25px;
font-size: 14px;
}
ul#album-list
{
list-style: none;
margin-left: 0px;
}
ul#album-list li
{
height: 130px;
width: 100px;
float: left;
margin: 10px;
text-align: center;
}
ul#album-list li a, ul#album-list li .button
{
font-size: 13px;
float: left;
}
ul#album-list li a span
{
color: #9b9993;
text-decoration: underline;
}
#cart
{
float: right;
}
#update-message
{
color: #F6855E;
font-weight: bold;
}
.button, input[type=submit]
{
clear: both;
display: inline-block;
padding: 5px;
margin-top: 10px;
border: 1px;
background: #5e5b54;
color: #fff;
font-weight: bold;
}
.button a
{
color: #fff !important;
}
#footer
{
clear: both;
padding: 10px;
text-align: right;
border-top: 1px dotted #8A8575;
border-bottom: 1px dotted #8A8575;
font-family: Constantia, Georgia, serif;
}
/******************** Top Navigation ************************/
ul#navlist
{
float: right;
}
ul#navlist li
{
display: inline;
}
ul#navlist li a
{
border-left: 1px dotted #8A8575;
padding: 10px;
margin-top: 10px;
color: #8A8575;
text-decoration: none;
float: left;
}
ul#navlist li:first-child a
{
border:...
JavaScript
$(".RemoveLink").click(function() {
var recordToDelete = $(this).attr("data-id");
if (recordToDelete) {
$.post("/ShoppingCart/RemoveFromCart", {
"id": recordToDelete
}, function(data) {
if (data.ItemCount === 0) {
$('#row-' + data.DeleteId).fadeOut('slow');
} else {
$('#item-count-' + data.DeleteId).text(data.ItemCount);
}
$('#cart-total').text(data.CartTotal);
$('#update-message').text(data.Message);
$('#cart-status').text('Cart (' + data.CartCount + ')');
});
}
});
$.mockjax({
url: "/ShoppingCart/RemoveFromCart",
responseTime: 750,
response: function(settings) {
var row = $( "#row-" + settings.data.id ),
itemCount = +row.find( "td" ).eq( 2 ).text(function(index, text) {
return +$.trim(text) - 1;
}).text(),
cartTotal = 0, cartCount = 0;
$("table tr").each(function(index, element) {
var row = $(element),
price = +row.find( "td" ).eq( 1 ).text(),
quantity = +row.find( "td" ).eq( 2 ).text();
if (price && quantity) {
cartCount += quantity;
cartTotal += price * quantity;
}
});
this.responseText = {
ItemCount: itemCount,
DeleteId: settings.data.id,
CartTotal: cartTotal.toFixed(2),
Message: "Your cart has been updated!",
CartCount: cartCount
};
}
});