Placeholder

CIS407A Week 1 iLab Annual Salary Calculator ASP.NET Web Application

$19.00

Step 1: Create Website and Home Page
In this Lab, we will learn how to create a simple ASP.NET Web application using Microsoft Visual Studio.NET. Then we will add to our application and perform calculations.
IMPORTANT: Please update your Visual Studio to the latest version of Visual Studio. Also, open Visual Studio Installer and be sure you have ASP.NET (Links to an external site.) and web Development, .NET desktop development, Universal Windows Platform development, and Desktop development for  C#.
Open Microsoft Visual Studio and pick Create a New Project
Pick C#, All Platforms, and Web from the drop down list boxes. If you do not see C# or Web, please open the Visual Studio Installer and Install those applications. You should see ASP.NET Core Web Application (NOT .NET Framework). Choose ASP.NET Core Web Application and pick Next.
If you do not see  ASP.NET Core Web application, you may see the following screen. If you see this screen, pick ASP.NET Core Web App (Model-View-Controller):

Description

Step 1: Create Website and Home Page
In this Lab, we will learn how to create a simple ASP.NET Web application using Microsoft Visual Studio.NET. Then we will add to our application and perform calculations.
IMPORTANT: Please update your Visual Studio to the latest version of Visual Studio. Also, open Visual Studio Installer and be sure you have ASP.NET (Links to an external site.) and web Development, .NET desktop development, Universal Windows Platform development, and Desktop development for  C#.
Open Microsoft Visual Studio and pick Create a New Project
Pick C#, All Platforms, and Web from the drop down list boxes. If you do not see C# or Web, please open the Visual Studio Installer and Install those applications. You should see ASP.NET Core Web Application (NOT .NET Framework). Choose ASP.NET Core Web Application and pick Next.
If you do not see  ASP.NET Core Web application, you may see the following screen. If you see this screen, pick ASP.NET Core Web App (Model-View-Controller):
At the next screen, give your system the name ManagementPortal. Remember the location of your project and where it is saved and choose to place the solution and project in the same directory. Click Create.
On this next screen choose ASP.NET Core Web App (Model-View-Controller). Authentication should show “No Authentication”. Click Create.
After you click Create you will get the screen below.
Look at the Solution Explorer on the right side of the screen. You will see Controllers, Models, and Views. Click on each of those folders and note the contents.
The model consists of the code that provides the business logic. We will add our C# classes here.
The view consists of the code that creates the user interface. We will use razor pages to generate these pages.
The controller consists of the code that receives requests from users, gets the appropriate data and stores it in the model, and passes the model to the appropriate view.
Let’s start the program to see how it runs in the default browser. To run your Web Application, you can press Control+F5 or click the Green start arrow in the toolbar.
You should see the web page in the browser. Note that you have pages ManagementPortal, Home, and Privacy.
Close the web page. This will stop the application from running. You can also stop the application by pressing Shift+F5 or clicking the red box on the tool bar. We are going to modify the home page to display a message. The home page is in the Views/Home/Index.cshtml. Open the Index.cshtml page by double clicking on it.
The Index.cshtml is a Razor page. Razor pages allow you to combine C# code and HTML for a dynamic web experience.
For example, you can use an if statement or foreach loop with C# syntax by preceding the code with a @ symbol. This allows you to declare a razor code block. In the beginning of the cshtml code you may see the following:
@{
ViewData[“Title”] = “Home Page”;
}
The @ symbol indicates that the following block of code is C#. For now, we will start by using HTML. Modify the html code in the Index.cshtml to the following (note: leave the Razor code the same):

Welcome to Our Site

This site is here for all your management needs.

Now save and run the application by clicking on the Green arrow. You should see the initial web page with a new message.
Close the web browser.
Click the Save button on the toolbar to save the changes.
Step 2: Add a Salary Calculator
Now that you have added a simple message to the index page, we would like to add a more complex web page. First we will add some data to the controller. This is not the ideal way to add data, but this exercise will illustrate how controllers and actions work. In the following weeks, we will add models that are a much better way of defining data. Open the HomeController.cs.
You will see several actions here. The Index() action is the action that runs when we run the program (Home/Index). We will add a new action called Salary. After the Index() action code, add the following code:
public IActionResult Salary()
{
return View();
}
The return View() will return a View Result Object for the view associated with this Action (the Salary view). We do not have a Salary view yet so we need to create one.
Go to Views/Home. Then right click and choose Add-> View.
Pick Razor-View Empty. Then name the view Salary.cshtml
The Salary View starts as a blank page. Add one

tag to the salary.cshtml page. It should look like this:
@*
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}

Salary Calculator

To illustrate how controllers work, we will now run this program. Click run to run your application in a Web browser. You will notice that your page has an address similar to the following:https://localhost:44359/  (Note: your port number may be different than this one).
Now navigate to https://localhost:44359/Home/Salary by adding /Home/Salary to the end of your web page.
The page should look like the following:
The controller is the Home controller and the action is the Salary action. The view rendered is Salary.cshtml.
Let’s add more code to our Salary action to illustrate the HTTP Get action.
Open the HomeController.cs and modify the salary action to the following. Note that you are now passing three variables to your Salary action.
public IActionResult Salary(string name, int hours, int payRate)
{
ViewData[“Title”] = “Salary Calculator”;
ViewData[“Message”] = “Salary calculator for employee: ” + name;
ViewData[“Hours”] = hours;
ViewData[“PayRate”] = payRate;
return View();
}
We are passing a name, hours, and pay rate as arguments to Salary. These values will be passed in the querystring when we run our program. In later weeks we will explore a more secure method of passing data. This code also sets several key properties of ViewData. These properties are dynamically created so you can set any properties you want. To set a property you would use the code: ViewData[“myClass”] = “ASP.NET”. The key can be any value you want. Then to call the method in the view you would use: @ViewData[“myClass”]. The ViewBag is similar to ViewData and can also dynamically set keys and values.
Now we will modify our Salary.cshtml to display the ViewData properties and calculate the salary. Add the following code to your salary.cshtml

@ViewData[“Title”]

 

@ViewData[“Message”]

Hours Worked:@ViewData[“Hours”]
Pay Rate:@ViewData[“PayRate”]
Salary:@(((int)ViewData[“Hours”]*(int)ViewData[“PayRate”]).ToString(“C2”))

 

Now we are ready to run our program. Try running the program and again navigating to /Home/Salary. You will notice that all the data values are 0
This is due to the fact that the Salary action is looking for three properties that are passed in the query string. Try running the program again and passing in three variables. The example below shows how you can pass the variables in the querystring. Please note your port number will be different than mine:https://localhost:44359/Home/Salary?name=Gina&hours=40&payRate=15
In this string the name is set to Gina, hours to 40 and payRate to 15. Enter your own name, hours, and payrate.
Take a screenshot of your web page showing your name, pay rate, and hours
Step 3: On Your Own
Add another ViewData object in your controller and display it in your salary.cshtml page. You do not need to pass it in the query string. This object will be similar to the Title. See example below with ViewData[“Description”]. Remember you need to change it in both the controller and the view.
SCREENSHOTS
SOLUTION
PAYMENT
CIS407A Week 1
CIS407A Week 1 Lab
CIS407A Week 1 iLab
The solution includes a Visual Studio ASP.NET project
Attachments [Move over files to preview content of those files]
CIS407A_Week_1_Lab.zip (1.31 MB)
Screenshots
Calculator-Screenshot.jpg
Code-Screenshot.jpg
Homepage-Screenshot.jpg
Visual Studio Project
ManagementPortal
.vs
ManagementPortal
config
applicationhost.config
v16
.suo
appsettings.Development.json
appsettings.json
bin
Debug
net5.0
appsettings.Development.json
appsettings.json
ManagementPortal.deps.json
ManagementPortal.dll
ManagementPortal.exe
ManagementPortal.pdb
ManagementPortal.runtimeconfig.dev.json
ManagementPortal.runtimeconfig.json
ManagementPortal.Views.dll
ManagementPortal.Views.pdb
ref
ManagementPortal.dll
Controllers
HomeController.cs
ManagementPortal
ManagementPortal.csproj
ManagementPortal.csproj.user
ManagementPortal.sln
Models
ErrorViewModel.cs
obj
Debug
net5.0
.NETCoreApp,Version=v5.0.AssemblyAttributes.cs
apphost.exe
ManagementPortal.AssemblyInfo.cs
ManagementPortal.AssemblyInfoInputs.cache
ManagementPortal.assets.cache
ManagementPortal.csproj.AssemblyReference.cache
ManagementPortal.csproj.CopyComplete
ManagementPortal.csproj.CoreCompileInputs.cache
ManagementPortal.csproj.FileListAbsolute.txt
ManagementPortal.dll
ManagementPortal.GeneratedMSBuildEditorConfig.editorconfig
ManagementPortal.genruntimeconfig.cache
ManagementPortal.MvcApplicationPartsAssemblyInfo.cache
ManagementPortal.pdb
ManagementPortal.RazorAssemblyInfo.cache
ManagementPortal.RazorAssemblyInfo.cs
ManagementPortal.RazorCoreGenerate.cache
ManagementPortal.RazorTargetAssemblyInfo.cache
ManagementPortal.RazorTargetAssemblyInfo.cs
ManagementPortal.TagHelpers.input.cache
ManagementPortal.TagHelpers.output.cache
ManagementPortal.Views.dll
ManagementPortal.Views.pdb
Razor
Views
Home
Index.cshtml.g.cs
Privacy.cshtml.g.cs
Salary.cshtml.g.cs
Shared
Error.cshtml.g.cs
_Layout.cshtml.g.cs
_ValidationScriptsPartial.cshtml.g.cs
_ViewImports.cshtml.g.cs
_ViewStart.cshtml.g.cs
ref
ManagementPortal.dll
staticwebassets
ManagementPortal.StaticWebAssets.Manifest.cache
ManagementPortal.StaticWebAssets.xml
ManagementPortal.csproj.nuget.dgspec.json
ManagementPortal.csproj.nuget.g.props
ManagementPortal.csproj.nuget.g.targets
project.assets.json
project.nuget.cache
Program.cs
Properties
launchSettings.json
Startup.cs
Views
Home
Index.cshtml
Privacy.cshtml
Salary.cshtml
Shared
Error.cshtml
_Layout.cshtml
_ValidationScriptsPartial.cshtml
_ViewImports.cshtml
_ViewStart.cshtml
wwwroot
css
site.css
favicon.ico
js
site.js
lib
bootstrap
dist
css
bootstrap-grid.css
bootstrap-grid.css.map
bootstrap-grid.min.css
bootstrap-grid.min.css.map
bootstrap-reboot.css
bootstrap-reboot.css.map
bootstrap-reboot.min.css
bootstrap-reboot.min.css.map
bootstrap.css
bootstrap.css.map
bootstrap.min.css
bootstrap.min.css.map
js
bootstrap.bundle.js
bootstrap.bundle.js.map
bootstrap.bundle.min.js
bootstrap.bundle.min.js.map
bootstrap.js
bootstrap.js.map
bootstrap.min.js
bootstrap.min.js.map
LICENSE
jquery
dist
jquery.js
jquery.min.js
jquery.min.map
LICENSE.txt
jquery-validation
dist
additional-methods.js
additional-methods.min.js
jquery.validate.js
jquery.validate.min.js
LICENSE.md
jquery-validation-unobtrusive
jquery.validate.unobtrusive.js
jquery.validate.unobtrusive.min.js
LICENSE.txt
Preview HomeController.cs
{
xxxxxx xxxxx xxxxxxxxxxxxxx : xxxxxxxxxx
{
xxxxxxx xxxxxxxx xxxxxxx
_xxxxxx;
public HomeController(ILogger
logger) { _logger = logger; }
public IActionResult Index() { return View(); }
public IActionResult Salary(string name, int hours, int payRate) {
xxxxxxxx[“xxxxx”] = “xxxxxx xxxxxxxxxx”;
xxxxxxxx[“xxxxxxx”] = “xxxxxx xxxxxxxxxx xxx xxxxxxxx: ” + xxxx;
xxxxxxxx[“xxxxx”] = xxxxx;
xxxxxxxx[“xxxxxxx”] = xxxxxxx;
xxxxxx xxxx();
Preview ErrorViewModel.cs
xxxxx xxxxxx;
xxxxxxxxx xxxxxxxxxxxxxxxx.xxxxxx
{
xxxxxx xxxxx xxxxxxxxxxxxxx
{ public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); } }
}
Preview Program.cs
xxxxx xxxxxxxxx.xxxxxxxxxx.xxxxxxx;
xxxxx xxxxxxxxx.xxxxxxxxxx.xxxxxxxxxxxxx;
xxxxx xxxxxxxxx.xxxxxxxxxx.xxxxxxx;
xxxxx xxxxxxxxx.xxxxxxxxxx.xxxxxxx;
xxxxx xxxxxx;
using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;
namespace ManagementPortal { public class Program
{
xxxxxx xxxxxx xxxx xxxx(xxxxxx[] xxxx)
{
xxxxxxxxxxxxxxxxx(xxxx).xxxxx().xxx();
}
Preview Startup.cs
xxxxxxxxx xxxxxxxxxxxxxxxx
{
xxxxxx xxxxx xxxxxxx
{
xxxxxx xxxxxxx(xxxxxxxxxxxxxx xxxxxxxxxxxxx)
{ Configuration = configuration; }
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); }
// xxxx xxxxxx xxxx xxxxxx xx xxx xxxxxxx. xxx xxxx xxxxxx xx xxxxxxxxx xxx xxxx xxxxxxx xxxxxxxx.
xxxxxx xxxx xxxxxxxxx(xxxxxxxxxxxxxxxxxxx xxx, xxxxxxxxxxxxxxxxxxx xxx)
{
xx (xxx.xxxxxxxxxxxxx())
{
xxx.xxxxxxxxxxxxxxxxxxxxxxxxx();
Preview site.css
}
.xxx-xxxxxxx {
xxxxx: #xxx;
xxxxxxxxxx-xxxxx: #1x6xx2;
border-color: #1861ac; }
.nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #1b6ec2; border-color: #1861ac; }
html { font-size: 14px; }
@xxxxx (xxx-xxxxx: 768xx) {
xxxx {
xxxx-xxxx: 16xx;
}
}
Preview bootstrap-grid.css
}
.xxxxxxxxx {
xxxxx: 100%;
xxxxxxx-xxxxx: 15xx;
padding-left: 15px; margin-right: auto; margin-left: auto; }
@media (min-width: 576px) { .container { max-width: 540px; } }
@media (min-width: 768px) {
.xxxxxxxxx {
xxx-xxxxx: 720xx;
}
}
@xxxxx (xxx-xxxxx: 992xx) {
Preview bootstrap-grid.min.css
html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!imp

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.