Web MVC site UI apperance
2
.gitignore
vendored
@ -251,3 +251,5 @@ paket-files/
|
||||
.idea/
|
||||
*.sln.iml
|
||||
pub/
|
||||
/src/Web/WebMVC/Properties/PublishProfiles/eShopOnContainersWebMVC2016 - Web Deploy-publish.ps1
|
||||
/src/Web/WebMVC/Properties/PublishProfiles/publish-module.psm1
|
||||
|
@ -7,7 +7,7 @@ services:
|
||||
- CatalogUrl=http://catalog.api
|
||||
- OrderingUrl=http://ordering.api
|
||||
ports:
|
||||
- "80:80"
|
||||
- "800:80"
|
||||
depends_on:
|
||||
- catalog.api
|
||||
|
||||
@ -31,10 +31,10 @@ services:
|
||||
- "81:80"
|
||||
# (Go to Production): For secured/final deployment, remove Ports mapping and
|
||||
# leave just the internal expose section
|
||||
# expose:
|
||||
# - "80"
|
||||
expose:
|
||||
- "800"
|
||||
extra_hosts:
|
||||
- "CESARDLBOOKVHD:10.0.75.1"
|
||||
- "DESKTOP-1HNACCH:192.168.1.39"
|
||||
depends_on:
|
||||
- ordering.data
|
||||
|
||||
|
@ -105,7 +105,24 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers
|
||||
ViewData["ReturnUrl"] = returnUrl;
|
||||
if (ModelState.IsValid)
|
||||
{
|
||||
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
|
||||
var user = new ApplicationUser
|
||||
{
|
||||
UserName = model.Email,
|
||||
Email = model.Email,
|
||||
CardHolderName = model.User.CardHolderName,
|
||||
CardNumber = model.User.CardNumber,
|
||||
CardType = model.User.CardType,
|
||||
City = model.User.City,
|
||||
Country = model.User.Country,
|
||||
Expiration = model.User.Expiration,
|
||||
LastName = model.User.LastName,
|
||||
Name = model.User.Name,
|
||||
Street = model.User.Street,
|
||||
State = model.User.State,
|
||||
ZipCode = model.User.ZipCode,
|
||||
PhoneNumber = model.User.PhoneNumber,
|
||||
SecurityNumber = model.User.SecurityNumber
|
||||
};
|
||||
var result = await _userManager.CreateAsync(user, model.Password);
|
||||
if (result.Succeeded)
|
||||
{
|
||||
|
@ -7,6 +7,8 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Newtonsoft.Json;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Services;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models.HomeViewModels;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Controllers
|
||||
{
|
||||
@ -14,31 +16,25 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers
|
||||
{
|
||||
private HttpClient _http;
|
||||
private AppSettings _settings;
|
||||
private ICatalogService _catalogSvc;
|
||||
|
||||
public HomeController(IOptions<AppSettings> options)
|
||||
public HomeController(IOptions<AppSettings> options, ICatalogService catalogSvc)
|
||||
{
|
||||
_http = new HttpClient();
|
||||
_settings = options.Value;
|
||||
_catalogSvc = catalogSvc;
|
||||
}
|
||||
public async Task<IActionResult> Index()
|
||||
{
|
||||
var dataString = await _http.GetStringAsync(_settings.CatalogUrl);
|
||||
var items = JsonConvert.DeserializeObject<List<CatalogItem>>(dataString);
|
||||
return View(items);
|
||||
}
|
||||
|
||||
public IActionResult About()
|
||||
{
|
||||
ViewData["Message"] = "Your application description page.";
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Contact()
|
||||
{
|
||||
ViewData["Message"] = "Your contact page.";
|
||||
|
||||
return View();
|
||||
//var dataString = await _http.GetStringAsync(_settings.CatalogUrl);
|
||||
//var items = JsonConvert.DeserializeObject<List<CatalogItem>>(dataString);
|
||||
//items.AddRange(items);
|
||||
var items = await _catalogSvc.GetCatalogItems();
|
||||
var vm = new IndexViewModel()
|
||||
{
|
||||
CatalogItems = items
|
||||
};
|
||||
return View(vm);
|
||||
}
|
||||
|
||||
public async Task<IActionResult> Orders()
|
||||
|
@ -60,11 +60,45 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers
|
||||
PhoneNumber = await _userManager.GetPhoneNumberAsync(user),
|
||||
TwoFactor = await _userManager.GetTwoFactorEnabledAsync(user),
|
||||
Logins = await _userManager.GetLoginsAsync(user),
|
||||
BrowserRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user)
|
||||
BrowserRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user),
|
||||
User = user
|
||||
};
|
||||
return View(model);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ValidateAntiForgeryToken]
|
||||
public async Task<IActionResult> Index(IndexViewModel model)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
{
|
||||
return View(model);
|
||||
}
|
||||
|
||||
var user = await _userManager.GetUserAsync(HttpContext.User);
|
||||
|
||||
user.CardHolderName = model.User.CardHolderName;
|
||||
user.CardNumber = model.User.CardNumber;
|
||||
//user.CardType = model.User.CardType;
|
||||
user.City = model.User.City;
|
||||
user.Country = model.User.Country;
|
||||
user.Expiration = model.User.Expiration;
|
||||
user.State = model.User.State;
|
||||
user.Street = model.User.Street;
|
||||
user.ZipCode = model.User.ZipCode;
|
||||
|
||||
var result = await _userManager.UpdateAsync(user);
|
||||
|
||||
if (result.Succeeded)
|
||||
{
|
||||
_logger.LogInformation(99, "User changed his address and payment method information.");
|
||||
return RedirectToAction(nameof(Index), new { Message = ManageMessageId.ProfileUpdated });
|
||||
}
|
||||
|
||||
AddErrors(result);
|
||||
return View(model);
|
||||
}
|
||||
|
||||
//
|
||||
// POST: /Manage/RemoveLogin
|
||||
[HttpPost]
|
||||
@ -347,7 +381,8 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers
|
||||
SetPasswordSuccess,
|
||||
RemoveLoginSuccess,
|
||||
RemovePhoneSuccess,
|
||||
Error
|
||||
Error,
|
||||
ProfileUpdated
|
||||
}
|
||||
|
||||
private Task<ApplicationUser> GetCurrentUserAsync()
|
||||
|
35
src/Web/WebMVC/Controllers/OrderController.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Services;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Controllers
|
||||
{
|
||||
public class OrderController : Controller
|
||||
{
|
||||
private IOrderingService _orderSvc;
|
||||
public OrderController(IOrderingService orderSvc)
|
||||
{
|
||||
_orderSvc = orderSvc;
|
||||
}
|
||||
|
||||
public IActionResult Cart()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Create()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Index(Order item)
|
||||
{
|
||||
_orderSvc.AddOrder(item);
|
||||
return View(_orderSvc.GetOrders());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,22 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Data;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
namespace WebMVC.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("00000000000000_CreateIdentitySchema")]
|
||||
partial class CreateIdentitySchema
|
||||
[Migration("20161019122215_Init_Scheme")]
|
||||
partial class Init_Scheme
|
||||
{
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "1.0.0-rc3")
|
||||
.HasAnnotation("ProductVersion", "1.0.0-rtm-21431")
|
||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole", b =>
|
||||
@ -132,18 +130,36 @@ namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
|
||||
b.Property<int>("AccessFailedCount");
|
||||
|
||||
b.Property<string>("CardHolderName");
|
||||
|
||||
b.Property<string>("CardNumber");
|
||||
|
||||
b.Property<int>("CardType");
|
||||
|
||||
b.Property<string>("City");
|
||||
|
||||
b.Property<string>("ConcurrencyStamp")
|
||||
.IsConcurrencyToken();
|
||||
|
||||
b.Property<string>("Country");
|
||||
|
||||
b.Property<string>("CountryCode");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<bool>("EmailConfirmed");
|
||||
|
||||
b.Property<string>("Expiration");
|
||||
|
||||
b.Property<double>("Latitude");
|
||||
|
||||
b.Property<bool>("LockoutEnabled");
|
||||
|
||||
b.Property<DateTimeOffset?>("LockoutEnd");
|
||||
|
||||
b.Property<double>("Longitude");
|
||||
|
||||
b.Property<string>("NormalizedEmail")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
@ -156,13 +172,23 @@ namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
|
||||
b.Property<bool>("PhoneNumberConfirmed");
|
||||
|
||||
b.Property<string>("SecurityNumber");
|
||||
|
||||
b.Property<string>("SecurityStamp");
|
||||
|
||||
b.Property<string>("State");
|
||||
|
||||
b.Property<string>("StateCode");
|
||||
|
||||
b.Property<string>("Street");
|
||||
|
||||
b.Property<bool>("TwoFactorEnabled");
|
||||
|
||||
b.Property<string>("UserName")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<string>("ZipCode");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("NormalizedEmail")
|
@ -1,13 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
namespace WebMVC.Migrations
|
||||
{
|
||||
public partial class CreateIdentitySchema : Migration
|
||||
public partial class Init_Scheme : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
@ -45,19 +43,33 @@ namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
{
|
||||
Id = table.Column<string>(nullable: false),
|
||||
AccessFailedCount = table.Column<int>(nullable: false),
|
||||
CardHolderName = table.Column<string>(nullable: true),
|
||||
CardNumber = table.Column<string>(nullable: true),
|
||||
CardType = table.Column<int>(nullable: false),
|
||||
City = table.Column<string>(nullable: true),
|
||||
ConcurrencyStamp = table.Column<string>(nullable: true),
|
||||
Country = table.Column<string>(nullable: true),
|
||||
CountryCode = table.Column<string>(nullable: true),
|
||||
Email = table.Column<string>(maxLength: 256, nullable: true),
|
||||
EmailConfirmed = table.Column<bool>(nullable: false),
|
||||
Expiration = table.Column<string>(nullable: true),
|
||||
Latitude = table.Column<double>(nullable: false),
|
||||
LockoutEnabled = table.Column<bool>(nullable: false),
|
||||
LockoutEnd = table.Column<DateTimeOffset>(nullable: true),
|
||||
Longitude = table.Column<double>(nullable: false),
|
||||
NormalizedEmail = table.Column<string>(maxLength: 256, nullable: true),
|
||||
NormalizedUserName = table.Column<string>(maxLength: 256, nullable: true),
|
||||
PasswordHash = table.Column<string>(nullable: true),
|
||||
PhoneNumber = table.Column<string>(nullable: true),
|
||||
PhoneNumberConfirmed = table.Column<bool>(nullable: false),
|
||||
SecurityNumber = table.Column<string>(nullable: true),
|
||||
SecurityStamp = table.Column<string>(nullable: true),
|
||||
State = table.Column<string>(nullable: true),
|
||||
StateCode = table.Column<string>(nullable: true),
|
||||
Street = table.Column<string>(nullable: true),
|
||||
TwoFactorEnabled = table.Column<bool>(nullable: false),
|
||||
UserName = table.Column<string>(maxLength: 256, nullable: true)
|
||||
UserName = table.Column<string>(maxLength: 256, nullable: true),
|
||||
ZipCode = table.Column<string>(nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
246
src/Web/WebMVC/Migrations/20161020101725_extendProfile.Designer.cs
generated
Normal file
@ -0,0 +1,246 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Data;
|
||||
|
||||
namespace WebMVC.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("20161020101725_extendProfile")]
|
||||
partial class extendProfile
|
||||
{
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "1.0.0-rtm-21431")
|
||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole", b =>
|
||||
{
|
||||
b.Property<string>("Id");
|
||||
|
||||
b.Property<string>("ConcurrencyStamp")
|
||||
.IsConcurrencyToken();
|
||||
|
||||
b.Property<string>("Name")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<string>("NormalizedName")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("NormalizedName")
|
||||
.HasName("RoleNameIndex");
|
||||
|
||||
b.ToTable("AspNetRoles");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
|
||||
b.Property<string>("ClaimType");
|
||||
|
||||
b.Property<string>("ClaimValue");
|
||||
|
||||
b.Property<string>("RoleId")
|
||||
.IsRequired();
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("RoleId");
|
||||
|
||||
b.ToTable("AspNetRoleClaims");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
|
||||
b.Property<string>("ClaimType");
|
||||
|
||||
b.Property<string>("ClaimValue");
|
||||
|
||||
b.Property<string>("UserId")
|
||||
.IsRequired();
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("AspNetUserClaims");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>", b =>
|
||||
{
|
||||
b.Property<string>("LoginProvider");
|
||||
|
||||
b.Property<string>("ProviderKey");
|
||||
|
||||
b.Property<string>("ProviderDisplayName");
|
||||
|
||||
b.Property<string>("UserId")
|
||||
.IsRequired();
|
||||
|
||||
b.HasKey("LoginProvider", "ProviderKey");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("AspNetUserLogins");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>", b =>
|
||||
{
|
||||
b.Property<string>("UserId");
|
||||
|
||||
b.Property<string>("RoleId");
|
||||
|
||||
b.HasKey("UserId", "RoleId");
|
||||
|
||||
b.HasIndex("RoleId");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("AspNetUserRoles");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserToken<string>", b =>
|
||||
{
|
||||
b.Property<string>("UserId");
|
||||
|
||||
b.Property<string>("LoginProvider");
|
||||
|
||||
b.Property<string>("Name");
|
||||
|
||||
b.Property<string>("Value");
|
||||
|
||||
b.HasKey("UserId", "LoginProvider", "Name");
|
||||
|
||||
b.ToTable("AspNetUserTokens");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.eShopOnContainers.WebMVC.Models.ApplicationUser", b =>
|
||||
{
|
||||
b.Property<string>("Id");
|
||||
|
||||
b.Property<int>("AccessFailedCount");
|
||||
|
||||
b.Property<string>("CardHolderName");
|
||||
|
||||
b.Property<string>("CardNumber");
|
||||
|
||||
b.Property<int>("CardType");
|
||||
|
||||
b.Property<string>("City");
|
||||
|
||||
b.Property<string>("ConcurrencyStamp")
|
||||
.IsConcurrencyToken();
|
||||
|
||||
b.Property<string>("Country");
|
||||
|
||||
b.Property<string>("CountryCode");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<bool>("EmailConfirmed");
|
||||
|
||||
b.Property<string>("Expiration");
|
||||
|
||||
b.Property<string>("LastName");
|
||||
|
||||
b.Property<double>("Latitude");
|
||||
|
||||
b.Property<bool>("LockoutEnabled");
|
||||
|
||||
b.Property<DateTimeOffset?>("LockoutEnd");
|
||||
|
||||
b.Property<double>("Longitude");
|
||||
|
||||
b.Property<string>("Name");
|
||||
|
||||
b.Property<string>("NormalizedEmail")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<string>("NormalizedUserName")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<string>("PasswordHash");
|
||||
|
||||
b.Property<string>("PhoneNumber");
|
||||
|
||||
b.Property<bool>("PhoneNumberConfirmed");
|
||||
|
||||
b.Property<string>("SecurityNumber");
|
||||
|
||||
b.Property<string>("SecurityStamp");
|
||||
|
||||
b.Property<string>("State");
|
||||
|
||||
b.Property<string>("StateCode");
|
||||
|
||||
b.Property<string>("Street");
|
||||
|
||||
b.Property<bool>("TwoFactorEnabled");
|
||||
|
||||
b.Property<string>("UserName")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<string>("ZipCode");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("NormalizedEmail")
|
||||
.HasName("EmailIndex");
|
||||
|
||||
b.HasIndex("NormalizedUserName")
|
||||
.IsUnique()
|
||||
.HasName("UserNameIndex");
|
||||
|
||||
b.ToTable("AspNetUsers");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>", b =>
|
||||
{
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole")
|
||||
.WithMany("Claims")
|
||||
.HasForeignKey("RoleId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>", b =>
|
||||
{
|
||||
b.HasOne("Microsoft.eShopOnContainers.WebMVC.Models.ApplicationUser")
|
||||
.WithMany("Claims")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>", b =>
|
||||
{
|
||||
b.HasOne("Microsoft.eShopOnContainers.WebMVC.Models.ApplicationUser")
|
||||
.WithMany("Logins")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>", b =>
|
||||
{
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole")
|
||||
.WithMany("Users")
|
||||
.HasForeignKey("RoleId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
b.HasOne("Microsoft.eShopOnContainers.WebMVC.Models.ApplicationUser")
|
||||
.WithMany("Roles")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
33
src/Web/WebMVC/Migrations/20161020101725_extendProfile.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
namespace WebMVC.Migrations
|
||||
{
|
||||
public partial class extendProfile : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "LastName",
|
||||
table: "AspNetUsers",
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "Name",
|
||||
table: "AspNetUsers",
|
||||
nullable: true);
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "LastName",
|
||||
table: "AspNetUsers");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "Name",
|
||||
table: "AspNetUsers");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,13 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Data;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
namespace WebMVC.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
partial class ApplicationDbContextModelSnapshot : ModelSnapshot
|
||||
@ -15,7 +13,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "1.0.0-rc3")
|
||||
.HasAnnotation("ProductVersion", "1.0.0-rtm-21431")
|
||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole", b =>
|
||||
@ -131,18 +129,40 @@ namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
|
||||
b.Property<int>("AccessFailedCount");
|
||||
|
||||
b.Property<string>("CardHolderName");
|
||||
|
||||
b.Property<string>("CardNumber");
|
||||
|
||||
b.Property<int>("CardType");
|
||||
|
||||
b.Property<string>("City");
|
||||
|
||||
b.Property<string>("ConcurrencyStamp")
|
||||
.IsConcurrencyToken();
|
||||
|
||||
b.Property<string>("Country");
|
||||
|
||||
b.Property<string>("CountryCode");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<bool>("EmailConfirmed");
|
||||
|
||||
b.Property<string>("Expiration");
|
||||
|
||||
b.Property<string>("LastName");
|
||||
|
||||
b.Property<double>("Latitude");
|
||||
|
||||
b.Property<bool>("LockoutEnabled");
|
||||
|
||||
b.Property<DateTimeOffset?>("LockoutEnd");
|
||||
|
||||
b.Property<double>("Longitude");
|
||||
|
||||
b.Property<string>("Name");
|
||||
|
||||
b.Property<string>("NormalizedEmail")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
@ -155,13 +175,23 @@ namespace Microsoft.eShopOnContainers.WebMVC.Data.Migrations
|
||||
|
||||
b.Property<bool>("PhoneNumberConfirmed");
|
||||
|
||||
b.Property<string>("SecurityNumber");
|
||||
|
||||
b.Property<string>("SecurityStamp");
|
||||
|
||||
b.Property<string>("State");
|
||||
|
||||
b.Property<string>("StateCode");
|
||||
|
||||
b.Property<string>("Street");
|
||||
|
||||
b.Property<bool>("TwoFactorEnabled");
|
||||
|
||||
b.Property<string>("UserName")
|
||||
.HasAnnotation("MaxLength", 256);
|
||||
|
||||
b.Property<string>("ZipCode");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("NormalizedEmail")
|
@ -23,5 +23,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Models.AccountViewModels
|
||||
[Display(Name = "Confirm password")]
|
||||
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
|
||||
public string ConfirmPassword { get; set; }
|
||||
|
||||
public ApplicationUser User { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Models
|
||||
{
|
||||
public class Address
|
||||
{
|
||||
public Guid ID { get; set; }
|
||||
public Guid Id { get; set; }
|
||||
public string Street { get; set; }
|
||||
public string City { get; set; }
|
||||
public string State { get; set; }
|
||||
|
@ -3,11 +3,30 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Models
|
||||
{
|
||||
// Add profile data for application users by adding properties to the ApplicationUser class
|
||||
public class ApplicationUser : IdentityUser
|
||||
{
|
||||
public string CardNumber { get; set; }
|
||||
public string SecurityNumber { get; set; }
|
||||
public string Expiration { get; set; }
|
||||
public string CardHolderName { get; set; }
|
||||
public int CardType { get; set; }
|
||||
public string Street { get; set; }
|
||||
public string City { get; set; }
|
||||
public string State { get; set; }
|
||||
public string StateCode { get; set; }
|
||||
public string Country { get; set; }
|
||||
public string CountryCode { get; set; }
|
||||
public string ZipCode { get; set; }
|
||||
public double Latitude { get; set; }
|
||||
public double Longitude { get; set; }
|
||||
[Required]
|
||||
public string Name { get; set; }
|
||||
[Required]
|
||||
public string LastName { get; set; }
|
||||
}
|
||||
}
|
||||
|
17
src/Web/WebMVC/Models/HomeViewModels/IndexViewModel.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Models.HomeViewModels
|
||||
{
|
||||
public class IndexViewModel
|
||||
{
|
||||
public IEnumerable<CatalogItem> CatalogItems { get; set; }
|
||||
public IEnumerable<SelectListItem> Brands { get; set; }
|
||||
public IEnumerable<SelectListItem> Types { get; set; }
|
||||
public int BrandFilterApplied { get; set; }
|
||||
public int TypesFilterApplied { get; set; }
|
||||
}
|
||||
}
|
@ -17,5 +17,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Models.ManageViewModels
|
||||
public bool TwoFactor { get; set; }
|
||||
|
||||
public bool BrowserRemembered { get; set; }
|
||||
|
||||
public ApplicationUser User { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -19,11 +19,10 @@ namespace Microsoft.eShopOnContainers.WebMVC.Models
|
||||
public int SequenceNumber { get; set; }
|
||||
public virtual Guid BuyerId { get; set; }
|
||||
public virtual Address ShippingAddress { get; set; }
|
||||
public virtual Address BillingAddress { get; set; }
|
||||
|
||||
public virtual DateTime OrderDate { get; set; }
|
||||
|
||||
//(CCE) public virtual Address BillingAddress { get; set; }
|
||||
//(CDLTLL) public virtual OrderStatus Status { get; set; }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
24
src/Web/WebMVC/Models/PaymentInfo.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Models
|
||||
{
|
||||
public class PaymentInfo
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string CardNumber {get;set;}
|
||||
public string SecurityNumber { get; set; }
|
||||
public int ExpirationMonth { get; set; }
|
||||
public int ExpirationYear { get; set; }
|
||||
public string CardHolderName { get; set; }
|
||||
public CardType CardType { get; set; }
|
||||
}
|
||||
|
||||
public enum CardType:int
|
||||
{
|
||||
AMEX,
|
||||
VISA
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:2113/",
|
||||
"applicationUrl": "http://localhost:2114/",
|
||||
"sslPort": 0
|
||||
}
|
||||
},
|
||||
|
41
src/Web/WebMVC/Services/CartService.cs
Normal file
@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
{
|
||||
public class CartService : ICartService
|
||||
{
|
||||
Order _order;
|
||||
|
||||
public CartService()
|
||||
{
|
||||
_order = new Order();
|
||||
_order.OrderItems = new System.Collections.Generic.List<OrderItem>();
|
||||
_order.OrderItems.Add(new OrderItem()
|
||||
{
|
||||
ProductName = "Cart product"
|
||||
});
|
||||
}
|
||||
|
||||
public void AddItemToOrder(CatalogItem item)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public int GetItemCountFromOrderInProgress()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<Order> GetOrderInProgress()
|
||||
{
|
||||
return Task.Run(() => { return _order; });
|
||||
}
|
||||
|
||||
public void RemoveItemFromOrder(Guid itemIdentifier)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
33
src/Web/WebMVC/Services/CatalogService.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
{
|
||||
public class CatalogService : ICatalogService
|
||||
{
|
||||
List<CatalogItem> _items;
|
||||
|
||||
public CatalogService() {
|
||||
_items = new List<CatalogItem>()
|
||||
{
|
||||
new CatalogItem() { Id = Guid.NewGuid(), Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12 },
|
||||
new CatalogItem() { Id = Guid.NewGuid(), Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17 },
|
||||
new CatalogItem() { Id = Guid.NewGuid(), Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12 },
|
||||
new CatalogItem() { Id = Guid.NewGuid(), Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = decimal.Parse("19.5") }
|
||||
};
|
||||
}
|
||||
|
||||
public CatalogItem GetCatalogItem(Guid Id)
|
||||
{
|
||||
return _items.Where(x => x.Id == Id).FirstOrDefault();
|
||||
}
|
||||
|
||||
public Task<List<CatalogItem>> GetCatalogItems()
|
||||
{
|
||||
return Task.Run(() => { return _items; });
|
||||
}
|
||||
}
|
||||
}
|
16
src/Web/WebMVC/Services/ICartService.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
{
|
||||
public interface ICartService
|
||||
{
|
||||
void AddItemToOrder(CatalogItem item);
|
||||
void RemoveItemFromOrder(Guid itemIdentifier);
|
||||
int GetItemCountFromOrderInProgress();
|
||||
Task<Order> GetOrderInProgress();
|
||||
}
|
||||
}
|
14
src/Web/WebMVC/Services/ICatalogService.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
{
|
||||
public interface ICatalogService
|
||||
{
|
||||
Task<List<CatalogItem>> GetCatalogItems();
|
||||
CatalogItem GetCatalogItem(Guid Id);
|
||||
}
|
||||
}
|
15
src/Web/WebMVC/Services/IOrderingService.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
{
|
||||
public interface IOrderingService
|
||||
{
|
||||
List<Order> GetOrders();
|
||||
Order GetOrder(Guid Id);
|
||||
void AddOrder(Order Order);
|
||||
}
|
||||
}
|
43
src/Web/WebMVC/Services/OrderingService.cs
Normal file
@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
{
|
||||
public class OrderingService : IOrderingService
|
||||
{
|
||||
private List<Order> _orders;
|
||||
|
||||
public OrderingService()
|
||||
{
|
||||
_orders = new List<Order>()
|
||||
{
|
||||
new Order()
|
||||
{
|
||||
BuyerId = Guid.NewGuid(), OrderDate = DateTime.Now,
|
||||
OrderItems = new List<OrderItem>()
|
||||
{
|
||||
new OrderItem() { UnitPrice = 12 }
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public void AddOrder(Order Order)
|
||||
{
|
||||
_orders.Add(Order);
|
||||
}
|
||||
|
||||
public Order GetOrder(Guid Id)
|
||||
{
|
||||
return _orders.Where(x => x.BuyerId == Id).FirstOrDefault();
|
||||
}
|
||||
|
||||
public List<Order> GetOrders()
|
||||
{
|
||||
return _orders;
|
||||
}
|
||||
}
|
||||
}
|
@ -52,6 +52,9 @@ namespace Microsoft.eShopOnContainers.WebMVC
|
||||
// Add application services.
|
||||
services.AddTransient<IEmailSender, AuthMessageSender>();
|
||||
services.AddTransient<ISmsSender, AuthMessageSender>();
|
||||
services.AddTransient<ICatalogService, CatalogService>();
|
||||
services.AddTransient<IOrderingService, OrderingService>();
|
||||
services.AddTransient<ICartService, CartService>();
|
||||
|
||||
services.Configure<AppSettings>(Configuration);
|
||||
}
|
||||
|
30
src/Web/WebMVC/ViewComponents/Cart.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Models;
|
||||
using Microsoft.eShopOnContainers.WebMVC.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.ViewComponents
|
||||
{
|
||||
public class Cart : ViewComponent
|
||||
{
|
||||
private readonly ICartService _cartSvc;
|
||||
|
||||
public Cart(ICartService cartSvc)
|
||||
{
|
||||
_cartSvc = cartSvc;
|
||||
}
|
||||
|
||||
public async Task<IViewComponentResult> InvokeAsync()
|
||||
{
|
||||
var item = await GetItemsAsync();
|
||||
return View(item);
|
||||
}
|
||||
private Task<Order> GetItemsAsync()
|
||||
{
|
||||
return _cartSvc.GetOrderInProgress();
|
||||
}
|
||||
}
|
||||
}
|
@ -7,83 +7,49 @@
|
||||
@{
|
||||
ViewData["Title"] = "Log in";
|
||||
}
|
||||
|
||||
<h2>@ViewData["Title"].</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<section>
|
||||
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
|
||||
<h4>Use a local account to log in.</h4>
|
||||
<hr />
|
||||
<div asp-validation-summary="All" class="text-danger"></div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Email" class="col-md-2 control-label"></label>
|
||||
<div class="col-md-10">
|
||||
<input asp-for="Email" class="form-control" />
|
||||
<div class="brand-header-block">
|
||||
<ul class="container">
|
||||
<li><a asp-area="" asp-controller="Account" asp-action="Register">REGISTER</a></li>
|
||||
<li class="active" style="margin-right: 65px;">LOGIN</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container account-login-container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<section>
|
||||
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
|
||||
<h4>ARE YOU REGISTERED?</h4>
|
||||
<div asp-validation-summary="All" class="text-danger"></div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Email" class="control-label form-label"></label>
|
||||
<input asp-for="Email" class="form-control form-input form-input-center" />
|
||||
<span asp-validation-for="Email" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Password" class="col-md-2 control-label"></label>
|
||||
<div class="col-md-10">
|
||||
<input asp-for="Password" class="form-control" />
|
||||
<div class="form-group">
|
||||
<label asp-for="Password" class="control-label form-label"></label>
|
||||
<input asp-for="Password" class="form-control form-input form-input-center" />
|
||||
<span asp-validation-for="Password" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-2 col-md-10">
|
||||
@*<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label asp-for="RememberMe">
|
||||
<input asp-for="RememberMe" />
|
||||
@Html.DisplayNameFor(m => m.RememberMe)
|
||||
</label>
|
||||
</div>
|
||||
</div>*@
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-default btn-brand btn-brand-big"> LOG IN </button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-2 col-md-10">
|
||||
<button type="submit" class="btn btn-default">Log in</button>
|
||||
</div>
|
||||
</div>
|
||||
<p>
|
||||
<a asp-action="Register" asp-route-returnurl="@ViewData["ReturnUrl"]">Register as a new user?</a>
|
||||
</p>
|
||||
<p>
|
||||
<a asp-action="ForgotPassword">Forgot your password?</a>
|
||||
</p>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<section>
|
||||
<h4>Use another service to log in.</h4>
|
||||
<hr />
|
||||
@{
|
||||
var loginProviders = SignInManager.GetExternalAuthenticationSchemes().ToList();
|
||||
if (loginProviders.Count == 0)
|
||||
{
|
||||
<div>
|
||||
<p>
|
||||
There are no external authentication services configured. See <a href="http://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
|
||||
for details on setting up this ASP.NET application to support logging in via external services.
|
||||
</p>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<form asp-controller="Account" asp-action="ExternalLogin" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
|
||||
<div>
|
||||
<p>
|
||||
@foreach (var provider in loginProviders)
|
||||
{
|
||||
<button type="submit" class="btn btn-default" name="provider" value="@provider.AuthenticationScheme" title="Log in using your @provider.DisplayName account">@provider.AuthenticationScheme</button>
|
||||
}
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
}
|
||||
}
|
||||
</section>
|
||||
<p>
|
||||
<a asp-action="Register" asp-route-returnurl="@ViewData["ReturnUrl"]" class="text">Register as a new user?</a>
|
||||
</p>
|
||||
<p>
|
||||
@*<a asp-action="ForgotPassword" class="text">Forgot your password?</a>*@
|
||||
</p>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -2,41 +2,106 @@
|
||||
@{
|
||||
ViewData["Title"] = "Register";
|
||||
}
|
||||
|
||||
<h2>@ViewData["Title"].</h2>
|
||||
|
||||
<form asp-controller="Account" asp-action="Register" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
|
||||
<h4>Create a new account.</h4>
|
||||
<hr />
|
||||
<div asp-validation-summary="All" class="text-danger"></div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Email" class="col-md-2 control-label"></label>
|
||||
<div class="col-md-10">
|
||||
<input asp-for="Email" class="form-control" />
|
||||
<span asp-validation-for="Email" class="text-danger"></span>
|
||||
<div class="brand-header-block">
|
||||
<ul class="container">
|
||||
<li class="active">REGISTER</li>
|
||||
<li style="margin-right: 65px;"><a asp-area="" asp-controller="Account" asp-action="Login">LOGIN</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container cart-index-container">
|
||||
@*<h2>@ViewData["Title"].</h2>*@
|
||||
<h4 class="order-create-section-title">CREATE NEW ACCOUNT</h4>
|
||||
<form asp-controller="Account" asp-action="Register" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
|
||||
@*<div asp-validation-summary="All" class="text-danger"></div>*@
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.Name" class="control-label form-label">NAME</label>
|
||||
<input asp-for="User.Name" class="form-control form-input" />
|
||||
<span asp-validation-for="User.Name" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.LastName" class="control-label form-label">LAST NAME</label>
|
||||
<input asp-for="User.LastName" class="form-control form-input" />
|
||||
<span asp-validation-for="User.LastName" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.Street" class="control-label form-label">ADDRESS</label>
|
||||
<input asp-for="User.Street" class="form-control form-input" />
|
||||
<span asp-validation-for="User.Street" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.City" class="control-label form-label"></label>
|
||||
<input asp-for="User.City" class="form-control form-input" />
|
||||
<span asp-validation-for="User.City" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.State" class="control-label form-label"></label>
|
||||
<input asp-for="User.State" class="form-control form-input" />
|
||||
<span asp-validation-for="User.State" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.Country" class="control-label form-label"></label>
|
||||
<input asp-for="User.Country" class="form-control form-input" />
|
||||
<span asp-validation-for="User.Country" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.ZipCode" class="control-label form-label">POSTCODE</label>
|
||||
<input asp-for="User.ZipCode" class="form-control form-input" />
|
||||
<span asp-validation-for="User.ZipCode" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.PhoneNumber" class="control-label form-label">PHONE NUMBER</label>
|
||||
<input asp-for="User.PhoneNumber" class="form-control form-input" />
|
||||
<span asp-validation-for="User.PhoneNumber" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.CardNumber" class="control-label form-label">Card Number</label>
|
||||
<input asp-for="User.CardNumber" class="form-control form-input" />
|
||||
<span asp-validation-for="User.CardNumber" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.CardHolderName" class="control-label form-label">Cardholder Name</label>
|
||||
<input asp-for="User.CardHolderName" class="form-control form-input" />
|
||||
<span asp-validation-for="User.CardHolderName" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-3">
|
||||
<label asp-for="User.Expiration" class="control-label form-label">Expiration Date</label>
|
||||
<input asp-for="User.Expiration" placeholder="MM/YY" class="form-control form-input form-input-small" />
|
||||
<span asp-validation-for="User.Expiration" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-3">
|
||||
<label asp-for="User.SecurityNumber" class="control-label form-label">Security Code</label>
|
||||
<input asp-for="User.SecurityNumber" class="form-control form-input form-input-small" />
|
||||
<span asp-validation-for="User.SecurityNumber" class="text-danger" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="Password" class="col-md-2 control-label"></label>
|
||||
<div class="col-md-10">
|
||||
<input asp-for="Password" class="form-control" />
|
||||
<span asp-validation-for="Password" class="text-danger"></span>
|
||||
<br /><br />
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="Email" class="control-label form-label"></label>
|
||||
<input asp-for="Email" class="form-control form-input" />
|
||||
<span asp-validation-for="Email" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group col-sm-offset-6"></div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="Password" class="control-label form-label"></label>
|
||||
<input asp-for="Password" class="form-control form-input" />
|
||||
<span asp-validation-for="Password" class="text-danger"></span>
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="ConfirmPassword" class="control-label form-label"></label>
|
||||
<input asp-for="ConfirmPassword" class="form-control form-input" />
|
||||
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<br /><br />
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-default btn-brand"> Register </button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label asp-for="ConfirmPassword" class="col-md-2 control-label"></label>
|
||||
<div class="col-md-10">
|
||||
<input asp-for="ConfirmPassword" class="form-control" />
|
||||
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-2 col-md-10">
|
||||
<button type="submit" class="btn btn-default">Register</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br /><br />
|
||||
</form>
|
||||
</div>
|
||||
@section Scripts {
|
||||
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
|
||||
}
|
||||
|
||||
|
@ -1,7 +0,0 @@
|
||||
@{
|
||||
ViewData["Title"] = "About";
|
||||
}
|
||||
<h2>@ViewData["Title"].</h2>
|
||||
<h3>@ViewData["Message"]</h3>
|
||||
|
||||
<p>Use this area to provide additional information.</p>
|
@ -1,17 +0,0 @@
|
||||
@{
|
||||
ViewData["Title"] = "Contact";
|
||||
}
|
||||
<h2>@ViewData["Title"].</h2>
|
||||
<h3>@ViewData["Message"]</h3>
|
||||
|
||||
<address>
|
||||
One Microsoft Way<br />
|
||||
Redmond, WA 98052-6399<br />
|
||||
<abbr title="Phone">P:</abbr>
|
||||
425.555.0100
|
||||
</address>
|
||||
|
||||
<address>
|
||||
<strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br />
|
||||
<strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
|
||||
</address>
|
@ -1,16 +1,67 @@
|
||||
@{
|
||||
ViewData["Title"] = "Home Page";
|
||||
@model IEnumerable<CatalogItem>
|
||||
@model Microsoft.eShopOnContainers.WebMVC.Models.HomeViewModels.IndexViewModel
|
||||
}
|
||||
|
||||
@foreach (var catalogItem in Model)
|
||||
{
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">@catalogItem.Name</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
@catalogItem.Description
|
||||
<div class="container-fluid">
|
||||
<div class="row home-banner">
|
||||
<div class="container home-banner-text"><img src="~/images/main_banner_text.png" /></div>
|
||||
</div>
|
||||
|
||||
<div class="home-catalog-filter-container">
|
||||
<div class="container">
|
||||
@*<ul class="nav navbar-nav col-sm-6 home-catalog-filter-brands">
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Index" class="btn-bracketed">ALL</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="About" class="btn-bracketed">AZURE</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Contact" class="btn-bracketed">.NET</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Orders" class="btn-bracketed">LOREM</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Orders" class="btn-bracketed">IPSUM</a></li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav col-sm-6 home-catalog-filter-types">
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Index" class="btn-bracketed">ALL</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="About" class="btn-bracketed">T-SHIRT</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Contact" class="btn-bracketed">STICKER</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Orders" class="btn-bracketed">MUGS</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Orders" class="btn-bracketed">SWEATSHIRT</a></li>
|
||||
</ul>*@
|
||||
<div data-name="brand" class="select-filter-wrapper">
|
||||
<img src="~/images/arrow-down.png" class="select-filter-arrow" />
|
||||
<select asp-for="BrandFilterApplied" asp-items="Model.Brands" class="select-filter" >
|
||||
<option>ALL</option>
|
||||
</select>
|
||||
</div>
|
||||
<div data-name="type" class="select-filter-wrapper">
|
||||
<img src="~/images/arrow-down.png" class="select-filter-arrow" />
|
||||
<select asp-for="TypesFilterApplied" asp-items="Model.Types" class="select-filter">
|
||||
<option>ALL</option>
|
||||
</select>
|
||||
</div>
|
||||
<a asp-area="" asp-controller="Home" asp-action="About" class="btn-brand btn-brand-small btn-brand-small-filter">
|
||||
APPLY
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="container home-catalog-container">
|
||||
<div class="row">
|
||||
@foreach (var catalogItem in Model.CatalogItems)
|
||||
{
|
||||
<div class="col-sm-4 home-catalog-item">
|
||||
<div class="home-catalog-item-image" >
|
||||
<img src="~/images/product_temp.PNG" />
|
||||
<a asp-area="" asp-controller="Home" asp-action="About" class="btn-brand home-catalog-item-image-addCart">
|
||||
ADD TO CART
|
||||
</a>
|
||||
</div>
|
||||
<div class="home-catalog-item-title">
|
||||
<span>@catalogItem.Name</span>
|
||||
</div>
|
||||
<div class="home-catalog-item-price">
|
||||
<span>@catalogItem.Price.ToString("N2")</span>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
ViewData["Title"] = "Change Password";
|
||||
}
|
||||
|
||||
<h2>@ViewData["Title"].</h2>
|
||||
|
||||
|
||||
<form asp-controller="Manage" asp-action="ChangePassword" method="post" class="form-horizontal">
|
||||
<h4>Change Password Form</h4>
|
||||
|
@ -3,69 +3,98 @@
|
||||
ViewData["Title"] = "Manage your account";
|
||||
}
|
||||
|
||||
<h2>@ViewData["Title"].</h2>
|
||||
@*<h2>@ViewData["Title"].</h2>*@
|
||||
<p class="text-success">@ViewData["StatusMessage"]</p>
|
||||
|
||||
<div>
|
||||
<h4>Change your account settings</h4>
|
||||
<hr />
|
||||
<dl class="dl-horizontal">
|
||||
<dt>Password:</dt>
|
||||
<dd>
|
||||
@if (Model.HasPassword)
|
||||
{
|
||||
<a asp-controller="Manage" asp-action="ChangePassword" class="btn-bracketed">Change</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<a asp-controller="Manage" asp-action="SetPassword" class="btn-bracketed">Create</a>
|
||||
}
|
||||
</dd>
|
||||
<dt>External Logins:</dt>
|
||||
<dd>
|
||||
|
||||
@Model.Logins.Count <a asp-controller="Manage" asp-action="ManageLogins" class="btn-bracketed">Manage</a>
|
||||
</dd>
|
||||
<dt>Phone Number:</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Phone Numbers can used as a second factor of verification in two-factor authentication.
|
||||
See <a href="http://go.microsoft.com/fwlink/?LinkID=532713">this article</a>
|
||||
for details on setting up this ASP.NET application to support two-factor authentication using SMS.
|
||||
</p>
|
||||
@*@(Model.PhoneNumber ?? "None")
|
||||
@if (Model.PhoneNumber != null)
|
||||
{
|
||||
<br />
|
||||
<a asp-controller="Manage" asp-action="AddPhoneNumber" class="btn-bracketed">Change</a>
|
||||
<form asp-controller="Manage" asp-action="RemovePhoneNumber" method="post">
|
||||
[<button type="submit" class="btn-link">Remove</button>]
|
||||
</form>
|
||||
}
|
||||
else
|
||||
{
|
||||
<a asp-controller="Manage" asp-action="AddPhoneNumber" class="btn-bracketed">Add</a>
|
||||
}*@
|
||||
</dd>
|
||||
|
||||
<dt>Two-Factor Authentication:</dt>
|
||||
<dd>
|
||||
<p>
|
||||
There are no two-factor authentication providers configured. See <a href="http://go.microsoft.com/fwlink/?LinkID=532713">this article</a>
|
||||
for setting up this application to support two-factor authentication.
|
||||
</p>
|
||||
@*@if (Model.TwoFactor)
|
||||
{
|
||||
<form asp-controller="Manage" asp-action="DisableTwoFactorAuthentication" method="post" class="form-horizontal">
|
||||
Enabled <button type="submit" class="btn-link btn-bracketed">Disable</button>
|
||||
</form>
|
||||
}
|
||||
else
|
||||
{
|
||||
<form asp-controller="Manage" asp-action="EnableTwoFactorAuthentication" method="post" class="form-horizontal">
|
||||
<button type="submit" class="btn-link btn-bracketed">Enable</button> Disabled
|
||||
</form>
|
||||
}*@
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="brand-header-block">
|
||||
<ul class="container">
|
||||
<li class="brand-header-back"><a asp-area="" asp-controller="Home" asp-action="Index">Back to list</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container cart-index-container">
|
||||
<form asp-controller="Manage" asp-action="Index" method="post" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-8 col-md-4">
|
||||
<button type="submit" class="btn btn-default btn-brand">[ Save ]</button>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="order-create-section-title">SHIPPING ADDRESS</h4>
|
||||
<div class="form-horizontal row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.Street" class="control-label form-label">ADDRESS</label>
|
||||
<input asp-for="User.Street" class="form-control form-input" />
|
||||
<span asp-validation-for="User.Street" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.City" class="control-label form-label"></label>
|
||||
<input asp-for="User.City" class="form-control form-input" />
|
||||
<span asp-validation-for="User.City" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.State" class="control-label form-label"></label>
|
||||
<input asp-for="User.State" class="form-control form-input" />
|
||||
<span asp-validation-for="User.State" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.Country" class="control-label form-label"></label>
|
||||
<input asp-for="User.Country" class="form-control form-input" />
|
||||
<span asp-validation-for="User.Country" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.ZipCode" class="control-label form-label"></label>
|
||||
<input asp-for="User.ZipCode" class="form-control form-input form-input-small" />
|
||||
<span asp-validation-for="User.ZipCode" class="text-danger" />
|
||||
</div>
|
||||
</div>
|
||||
<br /><br />
|
||||
<div class="order-create-section-payment">
|
||||
<h4 class="order-create-section-title">PAYMENT METHOD</h4>
|
||||
<div class="form-horizontal row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.CardNumber" class="control-label form-label">Card Number</label>
|
||||
<input asp-for="User.CardNumber" class="form-control form-input" />
|
||||
<span asp-validation-for="User.CardNumber" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.CardHolderName" class="control-label form-label">Cardholder Name</label>
|
||||
<input asp-for="User.CardHolderName" class="form-control form-input" />
|
||||
<span asp-validation-for="User.CardHolderName" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-3">
|
||||
<label asp-for="User.Expiration" class="control-label form-label">Expiration Date</label>
|
||||
<input asp-for="User.Expiration" placeholder="MM/YY" class="form-control form-input form-input-small" />
|
||||
<span asp-validation-for="User.Expiration" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-3">
|
||||
<label asp-for="User.SecurityNumber" class="control-label form-label">Security Code</label>
|
||||
<input asp-for="User.SecurityNumber" class="form-control form-input form-input-small" />
|
||||
<span asp-validation-for="User.SecurityNumber" class="text-danger" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br /><br />
|
||||
<h4 class="order-create-section-title">Change your account settings</h4>
|
||||
<div class="form-horizontal row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="User.Street" class="control-label form-label">PASSWORD</label>
|
||||
<br />
|
||||
@if (Model.HasPassword)
|
||||
{
|
||||
<a asp-controller="Manage" asp-action="ChangePassword" class="text">Change</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<a asp-controller="Manage" asp-action="SetPassword" class="text">Create</a>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<br /><br />
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-8 col-md-4">
|
||||
<button type="submit" class="btn btn-default btn-brand">[ Save ]</button>
|
||||
</div>
|
||||
</div>
|
||||
<br /><br />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
54
src/Web/WebMVC/Views/Order/Cart.cshtml
Normal file
@ -0,0 +1,54 @@
|
||||
@model Microsoft.eShopOnContainers.WebMVC.Models.Order
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "My Cart";
|
||||
}
|
||||
|
||||
<div class="brand-header-block">
|
||||
<ul class="container">
|
||||
<li class="brand-header-back"><a asp-area="" asp-controller="Home" asp-action="Index">Back to list</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container cart-index-container">
|
||||
<div class="row">
|
||||
<div class="col-md-offset-8 col-md-4">
|
||||
<a asp-controller="Home" asp-action="Index" class="btn btn-default btn-brand btn-brand-dark btn-cart"> Continue Shopping </a>
|
||||
</div>
|
||||
<br /><br /><br /><br />
|
||||
<div class="col-md-12">
|
||||
<section>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
PRODUCT
|
||||
</th>
|
||||
<th>
|
||||
|
||||
</th>
|
||||
<th>
|
||||
BRAND
|
||||
</th>
|
||||
<th>
|
||||
PRICE
|
||||
</th>
|
||||
<th>
|
||||
QUANTITY
|
||||
</th>
|
||||
<th>
|
||||
FINAL PRICE
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@await Component.InvokeAsync("Cart")
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
</div>
|
||||
<br /><br /><br /><br /><br /><br />
|
||||
<div class="col-md-offset-8 col-md-4">
|
||||
<a asp-controller="Order" asp-action="Create" class="btn btn-default btn-brand btn-cart"> CheckOut </a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
112
src/Web/WebMVC/Views/Order/Create.cshtml
Normal file
@ -0,0 +1,112 @@
|
||||
@model Microsoft.eShopOnContainers.WebMVC.Models.Order
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "View";
|
||||
}
|
||||
<div class="brand-header-block">
|
||||
<ul class="container">
|
||||
<li class="brand-header-back"><a asp-area="" asp-controller="Order" asp-action="Cart">Back to list</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container cart-index-container">
|
||||
<form asp-action="View">
|
||||
<h4 class="order-create-section-title">SHIPPING ADDRESS</h4>
|
||||
<div class="form-horizontal row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="OrderNumber" class="control-label form-label">order number</label>
|
||||
<input asp-for="OrderNumber" class="form-control form-input" />
|
||||
<span asp-validation-for="OrderNumber" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="SequenceNumber" class="control-label form-label"></label>
|
||||
<input asp-for="SequenceNumber" class="form-control form-input" />
|
||||
<span asp-validation-for="SequenceNumber" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="BuyerId" class="control-label form-label"></label>
|
||||
<input asp-for="BuyerId" class="form-control form-input" />
|
||||
<span asp-validation-for="BuyerId" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="OrderDate" class="control-label form-label"></label>
|
||||
<input asp-for="OrderDate" class="form-control form-input" />
|
||||
<span asp-validation-for="OrderDate" class="text-danger" />
|
||||
</div>
|
||||
</div>
|
||||
<br /><br />
|
||||
<div class="order-create-section-payment">
|
||||
<h4 class="order-create-section-title">PAYMENT METHOD</h4>
|
||||
<div class="form-horizontal row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="OrderNumber" class="control-label form-label">Card Number</label>
|
||||
<input asp-for="OrderNumber" class="form-control form-input" />
|
||||
<span asp-validation-for="OrderNumber" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="OrderNumber" class="control-label form-label">Cardholder Name</label>
|
||||
<input asp-for="OrderNumber" class="form-control form-input" />
|
||||
<span asp-validation-for="OrderNumber" class="text-danger" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal row">
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="OrderNumber" class="control-label form-label">Expiration Date</label>
|
||||
<select asp-for="OrderNumber" class="form-control form-select" />
|
||||
<span asp-validation-for="OrderNumber" class="text-danger" />
|
||||
<br />
|
||||
<label asp-for="OrderDate" class="control-label form-label">hhh</label>
|
||||
<select asp-for="OrderDate" class="form-control form-select" />
|
||||
<span asp-validation-for="OrderDate" class="text-danger" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label asp-for="OrderNumber" class="control-label form-label">Security Code</label>
|
||||
<input asp-for="OrderNumber" class="form-control form-input form-input-small" />
|
||||
<span asp-validation-for="OrderNumber" class="text-danger" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br /><br />
|
||||
<div class="col-md-12 order-create-section-items">
|
||||
<section>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
PRODUCT
|
||||
</th>
|
||||
<th>
|
||||
|
||||
</th>
|
||||
<th>
|
||||
BRAND
|
||||
</th>
|
||||
<th>
|
||||
PRICE
|
||||
</th>
|
||||
<th>
|
||||
QUANTITY
|
||||
</th>
|
||||
<th>
|
||||
FINAL PRICE
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@await Component.InvokeAsync("Cart")
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
</div>
|
||||
<br /><br /><br /><br /><br /><br />
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-8 col-md-4">
|
||||
@*<input type="submit" value="[ PLACE ORDER ]" class="btn btn-default btn-brand" />*@
|
||||
<a asp-controller="Order" asp-action="Index" class="btn btn-default btn-brand">[ PLACE ORDER ]</a>
|
||||
</div>
|
||||
</div>
|
||||
<br /><br /><br /><br /><br /><br />
|
||||
</form>
|
||||
</div>
|
||||
@section Scripts {
|
||||
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||
}
|
56
src/Web/WebMVC/Views/Order/Index.cshtml
Normal file
@ -0,0 +1,56 @@
|
||||
@model IEnumerable<Microsoft.eShopOnContainers.WebMVC.Models.Order>
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "View";
|
||||
}
|
||||
<div class="brand-header-block">
|
||||
<ul class="container">
|
||||
<li class="brand-header-back"><a asp-area="" asp-controller="Home" asp-action="Index">Back to home</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container cart-index-container">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.OrderNumber)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.OrderDate)
|
||||
@*@Html.DisplayNameFor(model => model.SequenceNumber)*@
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.BuyerId)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.OrderDate)
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var item in Model) {
|
||||
<tr>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.OrderNumber)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.OrderDate)
|
||||
@*@Html.DisplayFor(modelItem => item.SequenceNumber)*@
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.BuyerId)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.OrderDate)
|
||||
</td>
|
||||
<td>
|
||||
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
|
||||
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
|
||||
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
20
src/Web/WebMVC/Views/Shared/Components/Cart/Default.cshtml
Normal file
@ -0,0 +1,20 @@
|
||||
@model Microsoft.eShopOnContainers.WebMVC.Models.Order
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "My Cart";
|
||||
}
|
||||
|
||||
@foreach (var item in Model.OrderItems)
|
||||
{
|
||||
<tr>
|
||||
<td>@*image*@</td>
|
||||
<td>@item.ProductName</td>
|
||||
<td>ROSLYN</td>
|
||||
<td>$ @item.UnitPrice</td>
|
||||
<td>@item.Quantity</td>
|
||||
<td>$ @item.Quantity * @item.UnitPrice</td>
|
||||
</tr>
|
||||
}
|
||||
|
||||
|
||||
|
@ -19,31 +19,41 @@
|
||||
<body>
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Microsoft.eShopOnContainers.WebMVC</a>
|
||||
</div>
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Orders">Orders</a></li>
|
||||
</ul>
|
||||
@await Html.PartialAsync("_LoginPartial")
|
||||
<div class="row">
|
||||
<div class="navbar-header col-sm-8 col-xs-8">
|
||||
@*<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>*@
|
||||
<a asp-area="" asp-controller="Home" asp-action="Index">
|
||||
<div class="navbar-brand">
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="navbar-header col-sm-4 col-xs-4 text-center">
|
||||
@await Html.PartialAsync("_LoginPartial")
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container body-content">
|
||||
<div>
|
||||
@RenderBody()
|
||||
<hr />
|
||||
<footer>
|
||||
<p>© 2016 - Microsoft.eShopOnContainers.WebMVC</p>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<br><div class="brand"></div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<br />
|
||||
<br>
|
||||
<br />
|
||||
<div class="text hidden-xs">© e-ShoponContainers. All right reserved</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
@ -8,19 +8,16 @@
|
||||
{
|
||||
<form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
|
||||
</li>
|
||||
<li>
|
||||
<button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button>
|
||||
</li>
|
||||
<li style="float:right"><a asp-area="" asp-controller="Order" asp-action="Cart"><img src="~/images/cart.PNG" class="layout-cart-image hidden-xs"></a></li>
|
||||
<li class="fr"><a href="javascript:document.getElementById('logoutForm').submit()" class="btn-login"> Log Out </a></li>
|
||||
@*<li class="fr login-user"><a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">@UserManager.GetUserName(User)</a></li>*@
|
||||
</ul>
|
||||
</form>
|
||||
}
|
||||
else
|
||||
{
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
|
||||
<li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
|
||||
<li><a asp-area="" asp-controller="Account" class="btn-login" asp-action="Login"> Log In </a></li>
|
||||
<li><a asp-area="" asp-controller="Order" asp-action="Cart"><img src="~/images/cart.PNG" class="layout-cart-image hidden-xs"></a></li>
|
||||
</ul>
|
||||
}
|
||||
|
@ -3,6 +3,5 @@
|
||||
@using Microsoft.eShopOnContainers.WebMVC.Models.AccountViewModels
|
||||
@using Microsoft.eShopOnContainers.WebMVC.Models.ManageViewModels
|
||||
@using Microsoft.AspNetCore.Identity
|
||||
@using Microsoft.eShopOnContainers.WebMVC.Models
|
||||
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
|
@ -1,8 +1,9 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-Microsoft.eShopOnContainers.WebMVC-946ae052-8305-4a99-965b-ec8636ddbae3;Trusted_Connection=True;MultipleActiveResultSets=true"
|
||||
//"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-Microsoft.eShopOnContainers.WebMVC-946ae052-8305-4a99-965b-ec8636ddbae3;Trusted_Connection=True;MultipleActiveResultSets=true;"
|
||||
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=aspnet-Microsoft.eShopOnContainers.WebMVC;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Trusted_Connection=True;"
|
||||
},
|
||||
"CatalogUrl": "http://localhost:2418/",
|
||||
"CatalogUrl": "http://localhost:56986/",
|
||||
"OrderingUrl": "http://localhost:2446/",
|
||||
"Logging": {
|
||||
"IncludeScopes": false,
|
||||
@ -13,3 +14,5 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Data Source=tcp:eshoponcontainerswebmvc2016dbserver.database.windows.net,1433;Initial Catalog=eShopOnContainersWebMVC2016_db;User Id=eshoponcontainerswebmvc2016dbserver@eshoponcontainerswebmvc2016dbserver;Password=Patata.123
|
||||
|
@ -18,8 +18,12 @@
|
||||
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
|
||||
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
||||
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
|
||||
"Microsoft.EntityFrameworkCore.SqlServer.Design": {
|
||||
"version": "1.0.0",
|
||||
//"Microsoft.EntityFrameworkCore.SqlServer.Design": {
|
||||
// "version": "1.0.0-rc2-final",
|
||||
// "type": "build"
|
||||
//},
|
||||
"Microsoft.EntityFrameworkCore.Tools": {
|
||||
"version": "1.0.0-preview2-final",
|
||||
"type": "build"
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
||||
@ -88,6 +92,7 @@
|
||||
"dotnet bundle"
|
||||
],
|
||||
"postpublish": [
|
||||
/*"dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"*/]
|
||||
"dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
|
||||
]
|
||||
}
|
||||
}
|
@ -4,7 +4,6 @@
|
||||
<!--
|
||||
Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
|
||||
-->
|
||||
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
|
||||
|
@ -1,6 +1,19 @@
|
||||
body {
|
||||
padding-top: 50px;
|
||||
padding-bottom: 20px;
|
||||
@font-face {
|
||||
font-family: Montserrat;
|
||||
font-weight: 400;
|
||||
src: url("/fonts/Montserrat-Regular.eot?") format("eot"),url("/fonts/Montserrat-Regular.woff") format("woff"),url("/fonts/Montserrat-Regular.ttf") format("truetype"),url("/fonts/Montserrat-Regular.svg#Montserrat") format("svg")
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Montserrat;
|
||||
font-weight: 700;
|
||||
src: url("/fonts/Montserrat-Bold.eot?") format("eot"),url("/fonts/Montserrat-Bold.woff") format("woff"),url("/fonts/Montserrat-Bold.ttf") format("truetype"),url("/fonts/Montserrat-Bold.svg#Montserrat") format("svg")
|
||||
}
|
||||
|
||||
body {
|
||||
padding-top: 80px;
|
||||
/*padding-bottom: 20px;*/
|
||||
font-family: Montserrat,sans-serif;
|
||||
}
|
||||
|
||||
/* Wrapping element */
|
||||
@ -17,34 +30,514 @@ textarea {
|
||||
max-width: 280px;
|
||||
}
|
||||
|
||||
.select-filter {
|
||||
background-color: transparent;
|
||||
padding: 10px;
|
||||
margin: 10px;
|
||||
margin-right: 20px;
|
||||
color: white;
|
||||
padding-top: 20px;
|
||||
padding-bottom: 5px;
|
||||
min-width: 120px;
|
||||
border-color: #37c7ca;
|
||||
max-height: 43px;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
select::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select-filter-wrapper {
|
||||
z-index: 0;
|
||||
display:inline-block;
|
||||
margin-left: -10px;
|
||||
}
|
||||
|
||||
.select-filter-wrapper::before {
|
||||
content: attr(data-name);
|
||||
opacity: 0.5;
|
||||
z-index: 1;
|
||||
text-transform: uppercase;
|
||||
position: absolute;
|
||||
font-size: 10px;
|
||||
margin-top: 15px;
|
||||
margin-left: 25px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.select-filter-arrow {
|
||||
position: absolute;
|
||||
margin-left: 110px;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.btn-brand-small-filter {
|
||||
margin-top: 10px;
|
||||
position: absolute;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* Carousel */
|
||||
.carousel-caption p {
|
||||
font-size: 20px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.layout-cart-image {
|
||||
height: 36px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
/* buttons and links extension to use brackets: [ click me ] */
|
||||
.btn-bracketed::before {
|
||||
display:inline-block;
|
||||
.btn-bracketed:hover:before {
|
||||
display: inline-block;
|
||||
content: "[";
|
||||
padding-right: 0.5em;
|
||||
color: chartreuse;
|
||||
}
|
||||
.btn-bracketed::after {
|
||||
display:inline-block;
|
||||
|
||||
.btn-bracketed:hover:after {
|
||||
display: inline-block;
|
||||
content: "]";
|
||||
padding-left: 0.5em;
|
||||
color: chartreuse;
|
||||
}
|
||||
|
||||
.btn-brand {
|
||||
background-color: #83D01B;
|
||||
color: white;
|
||||
padding: 10px 20px 10px 20px;
|
||||
border-radius: 0px;
|
||||
border: none;
|
||||
width: 255px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
height: 45px;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.btn-brand::before {
|
||||
content: '['
|
||||
}
|
||||
|
||||
.btn-brand::after {
|
||||
content: ']'
|
||||
}
|
||||
|
||||
.btn-brand:hover:before {
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.btn-brand:hover:after {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.btn-brand-big {
|
||||
width: 360px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.btn-brand-small {
|
||||
width: 120px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.btn-brand-small::before {
|
||||
content: '';
|
||||
}
|
||||
|
||||
.btn-brand-small::after {
|
||||
content: '';
|
||||
}
|
||||
|
||||
.btn-brand-small:hover:before {
|
||||
content: '';
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.btn-brand-small:hover:after {
|
||||
content: '';
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.btn-brand-dark {
|
||||
background-color: #00a69c;
|
||||
}
|
||||
|
||||
.btn-brand:hover {
|
||||
color: white;
|
||||
background-color: #83D01B;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.btn-brand-dark:hover {
|
||||
background-color: #00a69c;
|
||||
}
|
||||
|
||||
.btn-cart {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
text-transform: uppercase;
|
||||
font-weight: normal!important;
|
||||
text-align: left;
|
||||
margin-bottom: 10px !important;
|
||||
color: #404040;
|
||||
}
|
||||
|
||||
.form-input {
|
||||
border-radius: 0;
|
||||
padding: 10px;
|
||||
height: 45px;
|
||||
width: 360px;
|
||||
max-width: 360px;
|
||||
}
|
||||
|
||||
.form-input-small {
|
||||
max-width: 100px;
|
||||
}
|
||||
|
||||
.form-select {
|
||||
border-radius: 0;
|
||||
padding: 10px;
|
||||
height: 45px;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
/* Make .svg files in the carousel display properly in older browsers */
|
||||
.carousel-inner .item img[src$=".svg"]
|
||||
{
|
||||
.carousel-inner .item img[src$=".svg"] {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.navbar-inverse {
|
||||
background-color: #FFF;
|
||||
border-color: #FFF;
|
||||
}
|
||||
|
||||
.navbar-inverse li {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.btn-login {
|
||||
border: 1px solid #00A69C;
|
||||
height: 36px!important;
|
||||
margin-right: 10px;
|
||||
margin-top: 10px;
|
||||
background-color: white;
|
||||
color: #00a69c;
|
||||
text-transform:uppercase;
|
||||
max-width: 140px;
|
||||
width: 140px;
|
||||
padding-top:8px!important;
|
||||
}
|
||||
|
||||
.btn-login {
|
||||
font-weight:normal!important;
|
||||
}
|
||||
|
||||
.btn-login::before {
|
||||
content: '[';
|
||||
}
|
||||
|
||||
.btn-login::after {
|
||||
content: ']';
|
||||
}
|
||||
|
||||
.btn-login:hover:before {
|
||||
content: '[ ';
|
||||
}
|
||||
|
||||
.btn-login:hover:after {
|
||||
content: ' ]';
|
||||
}
|
||||
|
||||
.navbar-inverse li a {
|
||||
height: 30px;
|
||||
padding: 5px 20px;
|
||||
color: #00A69C !important;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
margin-top: 20px;
|
||||
background-image: url(../images/brand.PNG);
|
||||
width: 201px;
|
||||
height: 44px;
|
||||
margin-left: 0px !important;
|
||||
}
|
||||
|
||||
.nav > li > a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav > li > a:hover, .nav > li > a:focus {
|
||||
background-color: #00A69C;
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
.home-banner {
|
||||
width: 100%;
|
||||
margin-right: 0px;
|
||||
margin-left: 0px;
|
||||
background-image: url(../images/main_banner.PNG);
|
||||
background-size: cover;
|
||||
height: 258px;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.home-banner-text {
|
||||
margin-top: 70px;
|
||||
}
|
||||
|
||||
.home-catalog-container {
|
||||
min-height: 400px;
|
||||
}
|
||||
|
||||
.home-catalog-filter-container {
|
||||
background-color: #00A69C;
|
||||
height:63px;
|
||||
}
|
||||
|
||||
.home-catalog-filter-container li a {
|
||||
padding-top: 5px !important;
|
||||
}
|
||||
|
||||
.home-catalog-filter-brands::before {
|
||||
content: 'BRAND';
|
||||
color: white;
|
||||
font-size: x-small;
|
||||
opacity: 0.5;
|
||||
margin: 10px 0px 0px 15px;
|
||||
}
|
||||
|
||||
.home-catalog-filter-types::before {
|
||||
content: 'TYPES';
|
||||
color: white;
|
||||
font-size: x-small;
|
||||
opacity: 0.5;
|
||||
margin: 10px 0px 0px 15px;
|
||||
}
|
||||
|
||||
.home-catalog-item {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.home-catalog-item-image {
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
max-width: 320px;
|
||||
}
|
||||
|
||||
.home-catalog-item-image-addCart {
|
||||
background-color: #83D01B;
|
||||
color: white;
|
||||
display: block;
|
||||
height: 43px;
|
||||
padding: 10px 20px 10px 20px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
margin-left: 50px;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.home-catalog-item-image-addCart:hover {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
.home-catalog-item-image:hover:after {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.home-catalog-item-title {
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
font-weight: 300;
|
||||
font-size: 16px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.home-catalog-item-price {
|
||||
text-align: center;
|
||||
font-weight: 900;
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.home-catalog-item-price::before {
|
||||
content: '$';
|
||||
}
|
||||
|
||||
.container .nav .navbar-nav .col-sm-6 ::before {
|
||||
content: 'BRAND';
|
||||
}
|
||||
|
||||
.validation-summary-errors li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: black;
|
||||
height: 150px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
footer .brand {
|
||||
margin-top: 25px;
|
||||
background-image: url(../images/brand_dark.PNG);
|
||||
max-width: 231px;
|
||||
height: 52px;
|
||||
margin-left: 0px !important;
|
||||
}
|
||||
|
||||
footer .text {
|
||||
text-align: right;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: #83D01B;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
form .text {
|
||||
color: #83D01B;
|
||||
}
|
||||
|
||||
form .col-md-4 {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.brand-header-block {
|
||||
background-color: #00A69C;
|
||||
height: 63px;
|
||||
}
|
||||
|
||||
.brand-header-block li {
|
||||
list-style: none;
|
||||
display: inline;
|
||||
opacity: 0.5;
|
||||
margin-top: 25px;
|
||||
margin-left: 10px;
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.brand-header-block li a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.brand-header-block li a:hover {
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.brand-header-block .active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.brand-header-block .active::before {
|
||||
content: '[ ';
|
||||
color: greenyellow;
|
||||
}
|
||||
|
||||
.brand-header-block .active::after {
|
||||
content: ' ]';
|
||||
color: greenyellow;
|
||||
}
|
||||
|
||||
.brand-header-back {
|
||||
float: left!important;
|
||||
margin-top: 20px!important;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.account-login-container {
|
||||
min-height: 70vh;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.account-register-container {
|
||||
min-height: 70vh;
|
||||
text-align: center !important;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.cart-index-container {
|
||||
min-height: 70vh;
|
||||
padding-top: 40px;
|
||||
}
|
||||
|
||||
.input-validation-error {
|
||||
border: 1px solid #fb0d0d;
|
||||
}
|
||||
|
||||
.text-danger {
|
||||
color: #fb0d0d;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.cart {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.form-horizontal h4 {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.form-control:focus {
|
||||
border-color: #83d01b;
|
||||
}
|
||||
|
||||
.form-input-center {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.order-create-section-title {
|
||||
margin-left: -15px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.order-create-section-items {
|
||||
margin-left: -30px;
|
||||
}
|
||||
|
||||
.fr {
|
||||
float:right!important;
|
||||
}
|
||||
|
||||
.login-user {
|
||||
position: absolute!important;
|
||||
top: 40px;
|
||||
right: 65px;
|
||||
}
|
||||
|
||||
/* Hide/rearrange for smaller screens */
|
||||
@media screen and (max-width: 767px) {
|
||||
/* Hide captions */
|
||||
.carousel-caption {
|
||||
display: none
|
||||
}
|
||||
/* Hide captions */
|
||||
.carousel-caption {
|
||||
display: none;
|
||||
}
|
||||
|
||||
footer .text {
|
||||
text-align: left;
|
||||
margin-top: -15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 415px) {
|
||||
.btn-brand-small-filter {
|
||||
width: 65px;
|
||||
padding:10px 10px 10px 10px;
|
||||
font-size: 10px;
|
||||
}
|
||||
}
|
||||
|
2
src/Web/WebMVC/wwwroot/css/site.min.css
vendored
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 15 KiB |
BIN
src/Web/WebMVC/wwwroot/fonts/Montserrat-Bold.eot
Normal file
1933
src/Web/WebMVC/wwwroot/fonts/Montserrat-Bold.svg
Normal file
After Width: | Height: | Size: 111 KiB |
BIN
src/Web/WebMVC/wwwroot/fonts/Montserrat-Bold.ttf
Normal file
BIN
src/Web/WebMVC/wwwroot/fonts/Montserrat-Bold.woff
Normal file
BIN
src/Web/WebMVC/wwwroot/fonts/Montserrat-Bold.woff2
Normal file
BIN
src/Web/WebMVC/wwwroot/fonts/Montserrat-Regular.eot
Normal file
1743
src/Web/WebMVC/wwwroot/fonts/Montserrat-Regular.svg
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
src/Web/WebMVC/wwwroot/fonts/Montserrat-Regular.ttf
Normal file
BIN
src/Web/WebMVC/wwwroot/fonts/Montserrat-Regular.woff
Normal file
BIN
src/Web/WebMVC/wwwroot/fonts/Montserrat-Regular.woff2
Normal file
BIN
src/Web/WebMVC/wwwroot/images/arrow-down.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
src/Web/WebMVC/wwwroot/images/brand.PNG
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
src/Web/WebMVC/wwwroot/images/brand_dark.PNG
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
src/Web/WebMVC/wwwroot/images/cart.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
src/Web/WebMVC/wwwroot/images/main_banner.png
Normal file
After Width: | Height: | Size: 713 KiB |
BIN
src/Web/WebMVC/wwwroot/images/main_banner_text.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
6
src/Web/WebMVC/wwwroot/images/main_banner_text.svg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
src/Web/WebMVC/wwwroot/images/product_temp.PNG
Normal file
After Width: | Height: | Size: 130 KiB |