aspnet-mvc-starter directory structure
The starter project by default includes all third-party plugins (see AspnetMvcStarter/App_Start/BundleConfig.cs file).
Optionally you can remove unwanted plugins to reduce output assets size and compile time:
dependencies section in the AspnetMvcStarter/package.json file.AspnetMvcStarter/Vendor/libs directory.@imports and @includes in the AspnetMvcStarter/Vendor/css/_theme/_libs.scss file.For example, if you want to exclude plyr plugin, you will need to:
plyr dependency in the AspnetMvcStarter/package.json file.AspnetMvcStarter/Vendor/libs/plyr directory.@import "../../libs/plyr/mixins"; and @include plyr-theme($background, $color);
lines in the AspnetMvcStarter/Vendor/css/_theme/_libs.scss file.
cmd.exe as administrator and run command npm install --add-python-to-path='true' --global --production windows-build-tools.Make your node.js install prioritized. You can do it in two ways:
Tools -> Options -> Projects and solutions. Move $(PATH) string to the top of the list using the arrows.Tools -> Options -> Projects and solutions. Click Add button and paste path to node.exe directory. Then move added path to the top of the list using the arrows.Restore NuGet packages. Wait while packages restored.package.json and select Restore Packages (Yarn). Wait while packages restored.Build -> Build AspnetMvcStarter.Main layoutAspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
<!DOCTYPE html>
<html lang="en" class="default-style">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=edge,chrome=1" />
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
<title>@ViewBag.Title - Asp.Net MVC Starter</title>
<!-- Main font -->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,500,500i,700,700i,900" rel="stylesheet" crossorigin="anonymous" />
<!-- Icons. Uncomment required icon fonts -->
<!-- @Styles.Render("~/bundle/vendor/fonts/fontawesome") -->
@Styles.Render("~/bundle/vendor/fonts/ionicons")
<!-- @Styles.Render("~/bundle/vendor/fonts/linearicons") -->
<!-- @Styles.Render("~/bundle/vendor/fonts/open-iconic") -->
<!-- @Styles.Render("~/bundle/vendor/fonts/pe-icon-7-stroke") -->
<!-- Core stylesheets -->
@Styles.Render("~/bundle/vendor/css/bootstrap")
@Styles.Render("~/bundle/vendor/css/appwork")
@Styles.Render("~/bundle/vendor/css/theme-corporate")
@Styles.Render("~/bundle/vendor/css/colors")
@Styles.Render("~/bundle/vendor/css/uikit")
<!-- Layout helpers -->
@Scripts.Render("~/bundle/vendor/js/layout-helpers")
<!-- Libs -->
<!-- `perfect-scrollbar` library required by SideNav plugin -->
@Styles.Render("~/bundle/vendor/css/perfect-scrollbar/perfect-scrollbar")
<!-- Application stylesheets -->
@Styles.Render("~/bundle/css/main")
@RenderSection("styles", required: false)
</head>
<body>
@RenderBody()
<!-- Core scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" crossorigin="anonymous"></script>
@Scripts.Render("~/bundle/vendor/js/popper/popper")
@Scripts.Render("~/bundle/vendor/js/bootstrap")
@Scripts.Render("~/bundle/vendor/js/sidenav")
<!-- Libs -->
<!-- `perfect-scrollbar` library required by SideNav plugin -->
@Scripts.Render("~/bundle/vendor/js/perfect-scrollbar/perfect-scrollbar")
<!-- Application javascripts -->
@Scripts.Render("~/bundle/js/main")
@RenderSection("scripts", required: false)
</body>
</html>
<!DOCTYPE html>
<html lang="en" class="default-style">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=edge,chrome=1" />
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
<title>@ViewBag.Title - Asp.Net MVC Starter</title>
<!-- Main font -->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,500,500i,700,700i,900" rel="stylesheet" crossorigin="anonymous" />
<!-- Icons. Uncomment required icon fonts -->
<!-- @Styles.Render("~/bundle/vendor/fonts/fontawesome") -->
@Styles.Render("~/bundle/vendor/fonts/ionicons")
<!-- @Styles.Render("~/bundle/vendor/fonts/linearicons") -->
<!-- @Styles.Render("~/bundle/vendor/fonts/open-iconic") -->
<!-- @Styles.Render("~/bundle/vendor/fonts/pe-icon-7-stroke") -->
<!-- Core stylesheets -->
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-bootstrap-css"" />", "~/bundle/vendor/css/bootstrap")
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-appwork-css"" />", "~/bundle/vendor/css/appwork")
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-theme-css"" />", "~/bundle/vendor/css/theme-corporate")
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-colors-css"" />", "~/bundle/vendor/css/colors")
@Styles.Render("~/bundle/vendor/css/uikit")
<!-- Layout helpers -->
@Scripts.Render("~/bundle/vendor/js/layout-helpers")
<!-- Theme settings -->
@Scripts.Render("~/bundle/vendor/js/theme-settings")
<script>
// Use settings panel generator to configure the plugin
window.themeSettings = new ThemeSettings({
cssPath: '',
themesPath: '',
pathResolver: function (path) {
var resolvedPaths = {
@foreach (string name in new string[] { "bootstrap", "appwork", "colors" })
{
<text>
'@(name).css': '@Styles.Url("~/bundle/vendor/css/" + name)',
'@(name)-material.css': '@Styles.Url("~/bundle/vendor/css/" + name + "-material")',
</text>
}
// UI Kit
'uikit.css': '@Styles.Url("~/bundle/vendor/css/uikit"))',
@foreach (string name in new string[] { "air", "corporate", "cotton", "gradient", "paper", "shadow", "soft", "sunrise", "twitlight", "vibrant" })
{
<text>
'theme-@(name).css': '@Styles.Url("~/bundle/vendor/css/theme-" + name)',
'theme-@(name)-material.css': '@Styles.Url("~/bundle/vendor/css/theme-" + name + "-material")',
</text>
}
};
return resolvedPaths[path] || path;
}
});
</script>
<!-- Libs -->
<!-- `perfect-scrollbar` library required by SideNav plugin -->
@Styles.Render("~/bundle/vendor/css/perfect-scrollbar/perfect-scrollbar")
<!-- Application stylesheets -->
@Styles.Render("~/bundle/css/main")
@RenderSection("styles", required: false)
</head>
<body>
@RenderBody()
<!-- Core scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" crossorigin="anonymous"></script>
@Scripts.Render("~/bundle/vendor/js/popper/popper")
@Scripts.Render("~/bundle/vendor/js/bootstrap")
@Scripts.Render("~/bundle/vendor/js/sidenav")
<!-- Libs -->
<!-- `perfect-scrollbar` library required by SideNav plugin -->
@Scripts.Render("~/bundle/vendor/js/perfect-scrollbar/perfect-scrollbar")
<!-- Application javascripts -->
@Scripts.Render("~/bundle/js/main")
@RenderSection("scripts", required: false)
</body>
</html>
You can set the layout in two ways:
layout property in the AspnetMvcStarter/Views/_ViewStart.cshtml file.layout property in the view's .cshtml file.
You can find navbar, sidenav and footer templates in the AspnetMvcStarter/Views/Shared/Layouts/Partials directory.
AspnetMvcStarter/Views/_ViewStart.cshtml
@{
Layout = "~/Views/Shared/Layouts/_Layout1.cshtml";
}
AspnetMvcStarter/Views/_ViewStart.cshtml
@{
Layout = "~/Views/Shared/Layouts/_Layout1Flex.cshtml";
}
AspnetMvcStarter/Views/_ViewStart.cshtml
@{
Layout = "~/Views/Shared/Layouts/_Layout2.cshtml";
}
AspnetMvcStarter/Views/_ViewStart.cshtml
@{
Layout = "~/Views/Shared/Layouts/_Layout2Flex.cshtml";
}
AspnetMvcStarter/Views/_ViewStart.cshtml
@{
Layout = "~/Views/Shared/Layouts/_LayoutBlank.cshtml";
}
To use settings panel, you need to add Appwork's stylesheets to the bundle config (use the generator to see the example):
AspnetMvcStarter/App_Start/BundleConfig.cs
...
// ------------------------------------------------------------------------------------
// Core stylesheets
//
bundles.Add(SassBundle("~/bundle/vendor/css/bootstrap").Include("~/Vendor/css/bootstrap.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/bootstrap-material").Include("~/Vendor/css/bootstrap-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/appwork").Include("~/Vendor/css/appwork.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/appwork-material").Include("~/Vendor/css/appwork-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/colors").Include("~/Vendor/css/colors.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/colors-material").Include("~/Vendor/css/colors-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/uikit").Include("~/Vendor/css/uikit.scss"));
// Themes
bundles.Add(SassBundle("~/bundle/vendor/css/theme-air").Include("~/Vendor/css/theme-air.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/theme-air-material").Include("~/Vendor/css/theme-air-material.scss"));
...
To enable a theme you need to:
Add theme file to the bundle config.
AspnetMvcStarter/App_Start/BundleConfig.cs
...
// ------------------------------------------------------------------------------------
// Core stylesheets
//
...
bundles.Add(SassBundle("~/bundle/vendor/css/theme-air").Include("~/Vendor/css/theme-air.scss"));
...
Include theme stylesheet.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
@Styles.Render("~/bundle/vendor/css/theme-air")
To enable a theme just include the required theme stylesheet.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-theme-css"" />", "~/bundle/vendor/css/theme-air")
To enable material styling you need to:
Set material-style class on the <html> element instead of default-style.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
<html class="material-style">
Add -material suffix to bootstrap, appwork, theme-* and colors paths in the AspnetMvcStarter/App_Start/BundleConfig.cs.
AspnetMvcStarter/App_Start/BundleConfig.cs
...
// ------------------------------------------------------------------------------------
// Core stylesheets
//
bundles.Add(SassBundle("~/bundle/vendor/css/bootstrap-material").Include("~/Vendor/css/bootstrap-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/appwork-material").Include("~/Vendor/css/appwork-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/theme-corporate-material").Include("~/Vendor/css/theme-corporate-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/colors-material").Include("~/Vendor/css/colors-material.scss"));
...
Add -material suffix to bootstrap, appwork, theme-* and colors stylesheets.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
@Styles.Render("~/bundle/vendor/css/bootstrap-material")
@Styles.Render("~/bundle/vendor/css/appwork-material")
@Styles.Render("~/bundle/vendor/css/theme-corporate-material")
@Styles.Render("~/bundle/vendor/css/colors-material")
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-bootstrap-css"" />", "~/bundle/vendor/css/bootstrap-material")
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-appwork-css"" />", "~/bundle/vendor/css/appwork-material")
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-theme-css"" />", "~/bundle/vendor/css/theme-corporate-material")
@Styles.RenderFormat(@"<link href=""{0}"" rel=""stylesheet"" class=""theme-settings-colors-css"" />", "~/bundle/vendor/css/colors-material")
Optionally you can enable material ripple. Just append material-ripple.js
script to the <head> section and call attachMaterialRippleOnLoad() function.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
@Scripts.Render("~/bundle/vendor/js/material-ripple")
<script>
window.attachMaterialRippleOnLoad();
</script>
Optionally you can enable material ripple. Just append material-ripple.js
script to the <head> section.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
@Scripts.Render("~/bundle/vendor/js/material-ripple")
To enable RTL direction support, open AspnetMvcStarter/App_Start/BundleConfig.cs file
and edit paths to load Appwork's stylesheets from the ~/Vendor/css/rtl/
directory instead of ~/Vendor/css/.
AspnetMvcStarter/App_Start/BundleConfig.cs
...
// ------------------------------------------------------------------------------------
// Core stylesheets
//
bundles.Add(SassBundle("~/bundle/vendor/css/bootstrap").Include("~/Vendor/css/rtl/bootstrap.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/appwork").Include("~/Vendor/css/rtl/appwork.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/theme-corporate").Include("~/Vendor/css/rtl/theme-corporate.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/colors").Include("~/Vendor/css/rtl/colors.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/uikit").Include("~/Vendor/css/rtl/uikit.scss"));
...
...
// ------------------------------------------------------------------------------------
// Core stylesheets
//
bundles.Add(SassBundle("~/bundle/vendor/css/bootstrap").Include("~/Vendor/css/rtl/bootstrap.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/bootstrap-material").Include("~/Vendor/css/rtl/bootstrap-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/appwork").Include("~/Vendor/css/rtl/appwork.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/appwork-material").Include("~/Vendor/css/rtl/appwork-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/colors").Include("~/Vendor/css/rtl/colors.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/colors-material").Include("~/Vendor/css/rtl/colors-material.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/uikit").Include("~/Vendor/css/rtl/uikit.scss"));
// Themes
bundles.Add(SassBundle("~/bundle/vendor/css/theme-air").Include("~/Vendor/css/rtl/theme-air.scss"));
bundles.Add(SassBundle("~/bundle/vendor/css/theme-air-material").Include("~/Vendor/css/rtl/theme-air-material.scss"));
...
To enable RTL direction, add dir="rtl" attribute to the <html> element.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
<html dir="rtl">
You can configure the initial layout by setting control classes to the <html> element.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
<html class="layout-fixed layout-collapsed">
| Control class | Description |
|---|---|
.layout-reversed |
Reverse layout direction without markup change. |
.layout-expanded |
Expand layout sidenav on small screens (< 992px). |
.layout-collapsed |
Collapse layout sidenav on large screens (>= 992px). |
.layout-offcanvas |
Make layout sidenav offcanvas. |
.layout-fixed |
Set layout position to fixed. |
.layout-fixed-offcanvas |
Set layout position to fixed with offcanvas sidenav. |
.layout-navbar-fixed |
Set layout navbar position to fixed. |
.layout-footer-fixed |
Set layout footer position to fixed. |
Optionally you can enable PACE.js progress bar:
Append pace.js script to the <head> section.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
@Scripts.Render("~/bundle/vendor/js/pace")
Append .page-loader element to the <body>.
AspnetMvcStarter/Views/Shared/Layouts/_Application.cshtml
<div class="page-loader"><div class="bg-primary"></div></div>
Use starter template generator to simplify the initial setup. Just replace a content of appropriate files with the generated code within the aspnet-mvc-starter directory.