Skip to content

Commit 9992938

Browse files
committed
product detail finished
1 parent 073213e commit 9992938

21 files changed

+99
-89
lines changed

AspnetRunBasics/Data/AspnetRunContextSeed.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
7979
Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.",
8080
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
8181
ImageFile = "product-1.png",
82-
Price = 950.00,
82+
Price = 950.00M,
8383
CategoryId = 1
8484
},
8585
new Product()
@@ -88,7 +88,7 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
8888
Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.",
8989
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
9090
ImageFile = "product-2.png",
91-
Price = 840.00,
91+
Price = 840.00M,
9292
CategoryId = 1
9393
},
9494
new Product()
@@ -97,7 +97,7 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
9797
Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.",
9898
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
9999
ImageFile = "product-3.png",
100-
Price = 650.00,
100+
Price = 650.00M,
101101
CategoryId = 2
102102
},
103103
new Product()
@@ -106,7 +106,7 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
106106
Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.",
107107
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
108108
ImageFile = "product-4.png",
109-
Price = 470.00,
109+
Price = 470.00M,
110110
CategoryId = 1
111111
},
112112
new Product()
@@ -115,7 +115,7 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
115115
Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.",
116116
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
117117
ImageFile = "product-5.png",
118-
Price = 380.00,
118+
Price = 380.00M,
119119
CategoryId = 1
120120
},
121121
new Product()
@@ -124,7 +124,7 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
124124
Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.",
125125
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
126126
ImageFile = "product-6.png",
127-
Price = 240.00,
127+
Price = 240.00M,
128128
CategoryId = 1
129129
}
130130
};

AspnetRunBasics/Entities/Product.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class Product
1212
public string Summary { get; set; }
1313
public string Description { get; set; }
1414
public string ImageFile { get; set; }
15-
public double Price { get; set; }
15+
public decimal Price { get; set; }
1616
public int CategoryId { get; set; }
1717
public Category Category { get; set; }
1818
}

AspnetRunBasics/Migrations/20200207114256_Initial.Designer.cs renamed to AspnetRunBasics/Migrations/20200217075909_Initial.Designer.cs

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AspnetRunBasics/Migrations/20200207114256_Initial.cs renamed to AspnetRunBasics/Migrations/20200217075909_Initial.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ protected override void Up(MigrationBuilder migrationBuilder)
7474
Summary = table.Column<string>(nullable: true),
7575
Description = table.Column<string>(nullable: true),
7676
ImageFile = table.Column<string>(nullable: true),
77-
Price = table.Column<double>(nullable: false),
77+
Price = table.Column<decimal>(nullable: false),
7878
CategoryId = table.Column<int>(nullable: false)
7979
},
8080
constraints: table =>

AspnetRunBasics/Migrations/AspnetRunContextModelSnapshot.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ protected override void BuildModel(ModelBuilder modelBuilder)
155155
.HasColumnType("nvarchar(80)")
156156
.HasMaxLength(80);
157157

158-
b.Property<double>("Price")
159-
.HasColumnType("float");
158+
b.Property<decimal>("Price")
159+
.HasColumnType("decimal(18,2)");
160160

161161
b.Property<string>("Summary")
162162
.HasColumnType("nvarchar(max)");
Lines changed: 19 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,32 @@
1-
@page
1+
@page "/Product/{productId}"
22
@model AspnetRunBasics.ProductDetailModel
33
@{
44
ViewData["Title"] = "ProductDetail";
55
}
66

7-
<section class="jumbotron text-center">
8-
<div class="container">
9-
<h1 class="jumbotron-heading">E-COMMERCE PRODUCT</h1>
10-
<p class="lead text-muted mb-0">Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500...</p>
11-
</div>
12-
</section>
137
<div class="container">
148
<div class="row">
159
<div class="col">
1610
<nav aria-label="breadcrumb">
1711
<ol class="breadcrumb">
18-
<li class="breadcrumb-item"><a href="/">Home</a></li>
19-
<li class="breadcrumb-item"><a href="category.html">Category</a></li>
12+
<li class="breadcrumb-item"><a asp-page="Product">Home</a></li>
13+
<li class="breadcrumb-item"><a asp-page="Product">Category</a></li>
2014
<li class="breadcrumb-item active" aria-current="page">Product</li>
2115
</ol>
2216
</nav>
2317
</div>
2418
</div>
2519
</div>
20+
2621
<div class="container">
2722
<div class="row">
2823
<!-- Image -->
2924
<div class="col-12 col-lg-6">
3025
<div class="card bg-light mb-3">
3126
<div class="card-body">
3227
<a href="" data-toggle="modal" data-target="#productModal">
33-
<img class="img-fluid" src="https://dummyimage.com/800x800/55595c/fff" />
34-
<p class="text-center">Zoom</p>
28+
<img class="img-fluid" src="~/images/product/@Model.Product.ImageFile.Replace('-','x')" />
29+
<p class="text-center">@Model.Product.Name</p>
3530
</a>
3631
</div>
3732
</div>
@@ -41,16 +36,16 @@
4136
<div class="col-12 col-lg-6 add_to_cart_block">
4237
<div class="card bg-light mb-3">
4338
<div class="card-body">
44-
<p class="price">99.00 $</p>
45-
<p class="price_discounted">149.90 $</p>
46-
<form method="get" action="cart.html">
39+
<p class="price">@Model.Product.Price $</p>
40+
<p class="price_discounted">@(Model.Product.Price + 120) $</p>
41+
<form asp-page-handler="AddToCart" method="post" name="addToCartForm" id="add_cart_form">
4742
<div class="form-group">
4843
<label for="colors">Color</label>
49-
<select class="custom-select" id="colors">
50-
<option selected>Select</option>
51-
<option value="1">Blue</option>
52-
<option value="2">Red</option>
53-
<option value="3">Green</option>
44+
<select asp-for="Color" class="custom-select" id="colors">
45+
<option selected>Black</option>
46+
<option value="Blue">Blue</option>
47+
<option value="Red">Red</option>
48+
<option value="Green">Green</option>
5449
</select>
5550
</div>
5651
<div class="form-group">
@@ -61,17 +56,18 @@
6156
<i class="fa fa-minus"></i>
6257
</button>
6358
</div>
64-
<input type="text" class="form-control" id="quantity" name="quantity" min="1" max="100" value="1">
59+
<input asp-for="Quantity" type="text" class="form-control" id="quantity" name="quantity" min="1" max="100" value="1">
6560
<div class="input-group-append">
6661
<button type="button" class="quantity-right-plus btn btn-success btn-number" data-type="plus" data-field="">
6762
<i class="fa fa-plus"></i>
6863
</button>
6964
</div>
7065
</div>
7166
</div>
72-
<a href="cart.html" class="btn btn-success btn-lg btn-block text-uppercase">
67+
<a href="javascript:;" onclick="parentNode.submit();" class="btn btn-success btn-lg btn-block text-uppercase">
7368
<i class="fa fa-shopping-cart"></i> Add To Cart
7469
</a>
70+
<input type="hidden" asp-for="@Model.Product.Id" name="productId" />
7571
</form>
7672
<div class="product_rassurance">
7773
<ul class="list-inline">
@@ -105,55 +101,14 @@
105101
<div class="card-header bg-primary text-white text-uppercase"><i class="fa fa-align-justify"></i> Description</div>
106102
<div class="card-body">
107103
<p class="card-text">
108-
Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.
104+
@Model.Product.Summary
109105
</p>
110106
<p class="card-text">
111-
Contrairement à une opinion répandue, le Lorem Ipsum n'est pas simplement du texte aléatoire. Il trouve ses racines dans une oeuvre de la littérature latine classique datant de 45 av. J.-C., le rendant vieux de 2000 ans. Un professeur du Hampden-Sydney College, en Virginie, s'est intéressé à un des mots latins les plus obscurs, consectetur, extrait d'un passage du Lorem Ipsum, et en étudiant tous les usages de ce mot dans la littérature classique, découvrit la source incontestable du Lorem Ipsum. Il provient en fait des sections 1.10.32 et 1.10.33 du "De Finibus Bonorum et Malorum" (Des Suprêmes Biens et des Suprêmes Maux) de Cicéron. Cet ouvrage, très populaire pendant la Renaissance, est un traité sur la théorie de l'éthique. Les premières lignes du Lorem Ipsum, "Lorem ipsum dolor sit amet...", proviennent de la section 1.10.32.
107+
@Model.Product.Description
112108
</p>
113109
</div>
114110
</div>
115111
</div>
116112

117-
<!-- Reviews -->
118-
<div class="col-12" id="reviews">
119-
<div class="card border-light mb-3">
120-
<div class="card-header bg-primary text-white text-uppercase"><i class="fa fa-comment"></i> Reviews</div>
121-
<div class="card-body">
122-
<div class="review">
123-
<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
124-
<meta itemprop="datePublished" content="01-01-2016">January 01, 2018
125-
126-
<span class="fa fa-star"></span>
127-
<span class="fa fa-star"></span>
128-
<span class="fa fa-star"></span>
129-
<span class="fa fa-star"></span>
130-
<span class="fa fa-star"></span>
131-
by Paul Smith
132-
<p class="blockquote">
133-
<p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
134-
</p>
135-
<hr>
136-
</div>
137-
<div class="review">
138-
<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
139-
<meta itemprop="datePublished" content="01-01-2016">January 01, 2018
140-
141-
<span class="fa fa-star" aria-hidden="true"></span>
142-
<span class="fa fa-star" aria-hidden="true"></span>
143-
<span class="fa fa-star" aria-hidden="true"></span>
144-
<span class="fa fa-star" aria-hidden="true"></span>
145-
<span class="fa fa-star" aria-hidden="true"></span>
146-
by Paul Smith
147-
<p class="blockquote">
148-
<p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
149-
</p>
150-
<hr>
151-
</div>
152-
</div>
153-
</div>
154-
</div>
155113
</div>
156114
</div>
157-
158-
159-
Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,52 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
42
using System.Threading.Tasks;
3+
using AspnetRunBasics.Repositories;
54
using Microsoft.AspNetCore.Mvc;
65
using Microsoft.AspNetCore.Mvc.RazorPages;
76

87
namespace AspnetRunBasics
98
{
109
public class ProductDetailModel : PageModel
1110
{
12-
public void OnGet()
11+
private readonly IProductRepository _productRepository;
12+
private readonly ICartRepository _cartRepository;
13+
14+
public ProductDetailModel(IProductRepository productRepository, ICartRepository cartRepository)
15+
{
16+
_productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository));
17+
_cartRepository = cartRepository ?? throw new ArgumentNullException(nameof(cartRepository));
18+
}
19+
20+
public Entities.Product Product { get; set; }
21+
22+
[BindProperty]
23+
public string Color { get; set; }
24+
25+
[BindProperty]
26+
public int Quantity { get; set; }
27+
28+
public async Task<IActionResult> OnGetAsync(int? productId)
29+
{
30+
if (productId == null)
31+
{
32+
return NotFound();
33+
}
34+
35+
Product = await _productRepository.GetProductByIdAsync(productId.Value);
36+
if (Product == null)
37+
{
38+
return NotFound();
39+
}
40+
return Page();
41+
}
42+
43+
public async Task<IActionResult> OnPostAddToCartAsync(int productId)
1344
{
45+
//if (!User.Identity.IsAuthenticated)
46+
// return RedirectToPage("./Account/Login", new { area = "Identity" });
1447

48+
await _cartRepository.AddItem("test", productId, Quantity, Color);
49+
return RedirectToPage("Cart");
1550
}
1651
}
1752
}

AspnetRunBasics/Pages/Shared/_Layout.cshtml

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" type="text/css">
1010
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
1111
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,300,600" rel="stylesheet" type="text/css">
12-
<link href="css/style.css" rel="stylesheet" type="text/css">
12+
<link href="~/css/style.css" rel="stylesheet" type="text/css">
1313

1414
</head>
1515
<body>
@@ -130,7 +130,27 @@
130130
<script src="//code.jquery.com/jquery-3.2.1.slim.min.js" type="text/javascript"></script>
131131
<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" type="text/javascript"></script>
132132
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" type="text/javascript"></script>
133-
133+
<script type="text/javascript">
134+
//Plus & Minus for Quantity product
135+
$(document).ready(function () {
136+
var quantity = 1;
137+
138+
$('.quantity-right-plus').click(function (e) {
139+
e.preventDefault();
140+
var quantity = parseInt($('#quantity').val());
141+
$('#quantity').val(quantity + 1);
142+
});
143+
144+
$('.quantity-left-minus').click(function (e) {
145+
e.preventDefault();
146+
var quantity = parseInt($('#quantity').val());
147+
if (quantity > 1) {
148+
$('#quantity').val(quantity - 1);
149+
}
150+
});
151+
152+
});
153+
</script>
134154

135155
@RenderSection("Scripts", required: false)
136156
</body>

0 commit comments

Comments
 (0)