<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="version" content="8.0.403"/>
    <title>ASP.NET and Web Development tutorials and articles</title>
    <link rel="canonical" href="https://www.mikesdotnetting.com/" />
    <link rel="alternate" type="application/atom+xml" title="Mike Brind, Web Development and ASP.NET Feed" href="https://www.mikesdotnetting.com/feed" />
    
    
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" crossorigin="anonymous" integrity="sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE=" />
<meta name="x-stylesheet-fallback-test" content="" class="sr-only" /><script>!function(a,b,c,d){var e,f=document,g=f.getElementsByTagName("SCRIPT"),h=g[g.length-1].previousElementSibling,i=f.defaultView&&f.defaultView.getComputedStyle?f.defaultView.getComputedStyle(h):h.currentStyle;if(i&&i[a]!==b)for(e=0;e<c.length;e++)f.write('<link href="'+c[e]+'" '+d+"/>")}("position","absolute",["/lib/bootstrap/dist/css/bootstrap.min.css"], "rel=\u0022stylesheet\u0022 crossorigin=\u0022anonymous\u0022 integrity=\u0022sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE=\u0022 ");</script>
    
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,400;0,700;1,300;1,400&display=swap" rel="stylesheet">
    <link href='https://fonts.googleapis.com/css?family=Oswald:300,400|Roboto:400,700' rel='stylesheet' type='text/css'>
    <link href="https://fonts.googleapis.com/css?family=Fredericka+the+Great&display=swap" rel="stylesheet">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <script defer src="https://use.fontawesome.com/releases/v5.0.11/js/all.js"  crossorigin="anonymous"></script>

    <link rel="stylesheet" href="/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm  border-bottom box-shadow mb-3">
            <div class="container">
                <div id="social">
                    <ul>
                        <li>
                            <a href="https://twitter.com/mikesdotnetting" title="Follow me on Twitter"><i class="fab fa-twitter"></i></a>
                        </li>
                        <li>
                            <a href="https://www.linkedin.com/in/mike-brind/" title="Connect with me on LinkedIn"><i class="fab fa-linkedin-in"></i></a>
                        </li>
                        <li>
                            <a href="https://stackexchange.com/users/45667/mike-brind" title="Check my StackExchange profile"><i class="fab fa-stack-exchange"></i></a>
                        </li>
                        <li>
                            <a href="https://github.com/mikebrind" title="My public Github"><i class="fab fa-github"></i></a>
                        </li>
                        <li>
                            <a rel="me" href="https://hachyderm.io/@mikebrind" title="I'm on Mastodon'"><i class="fab fa-mastodon"></i></a>
                        </li>
                        <li>
                            <a href="/feed" title="Subscribe to my feed"><i class="fas fa-rss"></i></a>
                        </li>
                    </ul>
                </div>
                <a class="navbar-brand" href="/rss">Mikesdotnetting</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <br>
                <span class="byline">
                    A collection of articles and tutorials on web development with ASP.NET by Mike Brind
                </span>

            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="row">
            <div class="col main-content">
                
<div class="summaries">
    <div>
        
            <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
            <!-- Leaderboard -->
            <ins class="adsbygoogle"
                 style="display:inline-block;width:728px;height:90px"
                 data-ad-client="ca-pub-8046723421340367"
                 data-ad-slot="8824136939"></ins>
            <script>
                (adsbygoogle = window.adsbygoogle || []).push({});
            </script>
        
    </div>

    <h2>Latest Entries</h2>
    

        <section class="article-summary">
            <h4><a href="/article/367/working-with-sass-in-an-asp-net-core-application">Working with Sass in an ASP.NET Core application</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">20 April 2023 12:40</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/15/css">CSS</a>
                    </span>
                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
                    <span class="label">
                        <a href="/category/44/net-7">.NET 7</a>
                    </span>
                    <span class="label">
                        <a href="/category/45/sass">Sass</a>
                    </span>
            </p>
            <p class="abstract">Sass (Syntactically Awesome Style Sheets) is a is a scripting language that is used to generate cascading style sheets (CSS files). Its syntax is very 
            similar to CSS itself, but it supports the use of variables, nesting, mixins and selector inheritance, none of which are available in CSS itself.  
		However, these features help you to organise and maintain your web 
		application's styles. In this article, I look at the steps required to incorporate and configure Sass in your ASP.NET Core project in both Visual Studio, and VS Code.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/366/why-doesnt-my-asp-net-core-7-web-app-launch-on-https">Why doesn&#x27;t my ASP.NET Core 7 web app launch on HTTPS?</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">20 March 2023 13:37</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
                    <span class="label">
                        <a href="/category/44/net-7">.NET 7</a>
                    </span>
            </p>
            <p class="abstract">Up until .NET 7, when you use the <code>dotnet run</code> command to run  your ASP.NET Core Razor Pages (or MVC) app, the built-in Ketstrel web server would listen on two URLs, one with a 
		<code>http</code> protocol and another that uses the <code>https</code> protocol. This behaviour is documented in many places (<a href="https://www.manning.com/books/asp-net-core-razor-pages-in-action?utm_source=mikebrind&amp;utm_medium=affiliate&amp;utm_campaign=book_brind_razor_7_26_21&amp;a_aid=mikebrind&amp;a_bid=f71bcc8c">including my book</a>) so it might come as a surprise when 
		you run your new .NET 7 app from the command line and it is only available on an 
		<code>http</code> binding. Something changed in .NET 7. What is it and how do you test your .NET 7 web app under 
		<code>https</code>?
</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/365/executing-async-operations-onchange-in-blazor">Executing async operations onchange in Blazor</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">10 January 2023 07:35</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/39/blazor">Blazor</a>
                    </span>
                    <span class="label">
                        <a href="/category/44/net-7">.NET 7</a>
                    </span>
            </p>
            <p class="abstract">Blazor's <a href="https://www.learnblazor.com/data-binding">two-way databinding model</a> is extremely powerful, but sometimes 
		it can get in the way of what you want to do. For example, you might 
		want to execute an asynchronous operation such as remote validation when a value changes in a 
		textbox. Perhaps you want to check instantaneously that the value - a username maybe - 
		doesn't already exist in a database before you accept a new 
		registration. You cannot add an <code>onchange</code> event handler if 
		you already have a value bound to the element, so what can you do? In this 
		article, I look at solutions for both HTML elements and EditForm input 
		validation components up to an including .NET 7, and a new 
		feature released in .NET 7.0.1.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/364/exploring-generating-pdf-files-from-html-in-asp-net-core">Exploring generating PDF files from HTML in ASP.NET Core</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">30 November 2022 13:45</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/20/itextsharp">iTextSharp</a>
                    </span>
                    <span class="label">
                        <a href="/category/30/html5">HTML5</a>
                    </span>
                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/42/bootstrap">Bootstrap</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
            </p>
            <p class="abstract">Back in 2008, I wrote a 
<a href="https://www.mikesdotnetting.com/category/20/itextsharp">series of articles 
about using iTextSharp to generate PDF files in an ASP.NET application</a>. I 
still use iTextSharp in a large MVC 5 application that I'm in the process of
<a href="https://www.mikesdotnetting.com/article/360/incrementally-migrating-an-asp-net-framework-application-to-razor-pages">
migrating to ASP.NET Core</a>. The version I use is very old (4.1.6), and the 
API is very low level so it takes quite a while to write the code required to generate 
even a moderately complex PDF. Ideally I need a replacement for the new 
application that can generate PDF files purely from HTML, which is an API I'm 
much more comfortable with. This ancient version of iTextSharp doesn't support 
HTML as a source of content. In this article, I consider some alternatives.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/363/a-reusable-generic-autocomplete-component-for-blazor">A reusable generic autocomplete component for Blazor</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">17 November 2022 13:14</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/39/blazor">Blazor</a>
                    </span>
            </p>
            <p class="abstract">In
<a href="https://www.mikesdotnetting.com/article/362/simple-autocomplete-for-blazor">
my last article</a>, I looked at building a simple autocomplete component within 
a Blazor WebAssembly application that fetches data dynamically from a database 
via an API depending on what the user enters into an input. It works nicely but 
it has not been designed to be reusable. In this article, I look at the steps required to convert the 
component so that it can be plugged in anywhere within an application and work 
with any kind of data.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/362/simple-autocomplete-for-blazor">Simple Autocomplete for Blazor</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">07 November 2022 13:35</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/39/blazor">Blazor</a>
                    </span>
            </p>
            <p class="abstract">One of the things I really like about Blazor is how often it is easy to implement 
features in your application that, if needed in a server-side application, would have you testing your JavaScript-fu or 
reaching for a third party component. One example is an autocomplete component 
that fetches live data from a database that matches that which a user enters 
into a form control and changes as the user types. In this 
article, I'll show how to build such a component for a Blazor WebAssembly app 
and style it like a dropdown.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/361/resize-images-before-uploading-in-blazor-web-assembly">Resize images before uploading in Blazor Web Assembly</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">31 October 2022 14:02</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/39/blazor">Blazor</a>
                    </span>
            </p>
            <p class="abstract">So, you allow users to upload images to the server from your Blazor WASM app, but you 
want to constrain the actual dimensions of the image for some reason. Rather than ask the user to edit the image prior to uploading, you decide to  to take care of applying this requirement within the application. And you further decide to do any resizing in the browser 
<em>prior</em> to uploading so that the resulting upload is smaller and you don't have to waste server resources on the procedure. In this article, I take a look at how to do that, and how to get the dimensions of an image file.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/360/incrementally-migrating-an-asp-net-framework-application-to-razor-pages">Incrementally Migrating an ASP.NET Framework application to Razor Pages</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">01 September 2022 07:08</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/22/asp-net-mvc">ASP.NET MVC</a>
                    </span>
                    <span class="label">
                        <a href="/category/26/asp-net-web-forms">ASP.NET Web Forms</a>
                    </span>
                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
            </p>
            <p class="abstract">Do you have a huge .NET framework application (Web forms, MVC) that 
		relies on authentication and/or System.Web types that you would 
ideally like to migrate to .NET Core, but just don't have the bandwidth to put 
everything on hold while you rewrite the entire application on a new framework? 
If so, you might be interested in an exciting new project from Microsoft - 
		<a href="https://github.com/dotnet/systemweb-adapters">SystemWebAdapters for ASP.NET Core</a>
- that enables you to incrementally migrate your old application, endpoint by 
endpoint.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/359/strongly-typed-middleware-in-asp-net-core">Strongly Typed Middleware in ASP.NET Core</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">24 August 2022 12:30</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
            </p>
            <p class="abstract">Most ASP.NET Core developers are familiar with the traditional way to author 
middleware classes which is based on conventions. The vast majority of examples 
out there feature the convention-based approach. But 
there is also a strongly typed approach available which is based on implementing 
the <code>IMiddleware</code> interface. This seems to be one of ASP.NET Core's 
best kept secrets, so I thought I'd pull the curtains back and let some light 
shine on it.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/358/using-minimal-apis-in-asp-net-core-razor-pages">Using Minimal APIs in ASP.NET Core Razor Pages</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">14 December 2021 13:33</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
            </p>
            <p class="abstract">If you are using ASP.NET Core Razor Pages to develop your web
        application, you have already decided that the majority of your HTML
        will be generated on the server. Nevertheless, chances are that you will
        want to introduce some client side operations into the application to
        improve its user friendliness in places. If those operations involve
        data, you will probably want to work with JSON. From .NET 6, you can use
        a simplified minimal request handler API that works with JSON by
        default.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/357/razor-pages-startup-in-net-6">Razor Pages Startup in .NET 6</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">06 October 2021 13:05</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
            </p>
            <p class="abstract">When you create a new web app using .NET 6 (from the new RC1 templates), you might notice something is missing. There is no Startup class. What happened to it? And how do you configure your new .NET 6 
web app?</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/356/i-am-writing-a-book-about-razor-pages">I am writing a book about Razor Pages</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">26 July 2021 18:13</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
            </p>
            <p class="abstract">Just over three years go, when Razor Pages was first launched, I had a number of questions from people asking whether I was going to write a book about the Razor Pages framework. I guess they asked me  because Razor Pages appeared to be a natural successor to the old ASP.NET Web Pages framework, and I had written a book about that. Also, I was regularly blogging at the time about all the good things you could do with Razor Pages. <a href="https://www.mikesdotnetting.com/article/314/im-not-writing-a-book-on-razor-pages">The answer then was No</a>, primarily because I was working on my own tutorial/documentation site 
for Razor Pages - <a href="https://www.learnrazorpages.com/">learnrazorpages.com</a>.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/355/css-isolation-in-razor-pages">CSS Isolation In Razor Pages</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">19 July 2021 10:54</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/43/net-6">.NET 6</a>
                    </span>
            </p>
            <p class="abstract">CSS isolation was introduced in .NET 5 for Blazor components. Now it's coming to Razor Pages (and MVC views) in .NET 6, due to be released in November this year. Here's a quick look at 
how CSS isolation works in Razor Pages and the kind of problem that it's designed to solve.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/354/implementing-a-custom-typeconverter-in-razor-pages">Implementing a Custom TypeConverter In Razor Pages</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">24 November 2020 18:34</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
            </p>
            <p class="abstract"> In my most recent article, I showed 
		<a href="https://www.mikesdotnetting.com/article/353/implementing-a-custom-model-binder-in-razor-pages">how to create a custom model 
		binder</a> to bind an ISO 8601 string representation of a week of the year 
		to a <code>DateTime</code> type in a Razor Pages application. The custom 
		model binder leant heavily on the existing infrastructure that binds 
		strings to simple types. Custom model binders are the correct solution 
		if you want to bind to simple types, but if you want to bind to a 
		complex type, the recommendation is to implement a <code>TypeConverter</code>
		<a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/custom-model-binding?view=aspnetcore-3.1#recommendations-and-best-practices">
		according to the offical docs</a>. But the docs don't provide an example 
		that shows how to do that in the context of model binding. So here's 
		one.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/353/implementing-a-custom-model-binder-in-razor-pages">Implementing a Custom Model Binder In Razor Pages</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">10 November 2020 15:28</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
            </p>
            <p class="abstract">In Razor Pages, model binding is the process that maps data from an HTTP request to 
	simple PageModel properties or handler parameters. 
	Incoming data can be included in a request as posted form values, query 
	string values or route data. The default collection of model binders cover 
	every simple .NET data type.. But sometimes they are not enough, and you need to add 
	your own implementation.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/352/working-with-dates-and-times-in-razor-pages-forms">Working with Dates And Times in Razor Pages Forms</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">02 November 2020 17:17</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
            </p>
            <p class="abstract">When working with dates and times in a Razor Pages form, you need to render 
	a suitable control based in the task requirement. Prior to HTML5, developers 
	largely depended on third party date picker libraries. Now, a variety of native 
	browser options 
	exist, although they enjoy <a href="https://caniuse.com/?search=date%20and%20time">
	varied support across modern browsers</a>. These include options for 
	managing the date and time, just the date or time, and for working with the 
	month or week of the year. </p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/351/display-images-in-bootstrap-carousel-using-razor-pages-and-entity-framework">Display Images in Bootstrap Carousel using Razor Pages and Entity Framework</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">19 June 2020 15:37</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/42/bootstrap">Bootstrap</a>
                    </span>
            </p>
            <p class="abstract">This short article shows how to display images stored in a database in a Razor Pages application using the Bootstrap Carousel and Entity Framework Core.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/350/razor-pages-and-bootstrap-lazy-loading-tabs">Razor Pages And Bootstrap - Lazy Loading Tabs</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">10 June 2020 12:34</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/42/bootstrap">Bootstrap</a>
                    </span>
            </p>
            <p class="abstract">Tabbed interfaces are a great way for managing the presentation of large amounts of information into separate panels, where each panel's data makes sense on its own, and only one panel is viewable at a time.  The tabs in a browser are a great example of this. From a Razor Pages developer's point of view, tabs are particularly useful for controlling the display of complex data in Line Of Business applications.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/349/razor-pages-and-bootstrap-modal-master-details">Razor Pages And Bootstrap - Modal Master Details</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">28 May 2020 16:09</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/42/bootstrap">Bootstrap</a>
                    </span>
            </p>
            <p class="abstract">This is the first in a series of posts exploring how to use some of the 
components provided by Bootstrap within a database-driven Razor Pages web 
application. In this article, I look at using the Bootstrap Modal in a 
Master/Details scenario, to display the details of the selected record in a 
master list.</p>
        </section>
        <section class="article-summary">
            <h4><a href="/article/348/razor-pages-localisation-seo-friendly-urls">Razor Pages Localisation - SEO-friendly URLs</a></h4>
            <p class="posted"><i class="material-icons">calendar_today</i> <span class="posted-date">07 January 2020 07:37</span></p>
            <p class="category-tags">

                    <span class="label">
                        <a href="/category/36/asp-net-core">ASP.NET Core</a>
                    </span>
                    <span class="label">
                        <a href="/category/37/razor-pages">Razor Pages</a>
                    </span>
                    <span class="label">
                        <a href="/category/41/localization">Localization</a>
                    </span>
            </p>
            <p class="abstract">This is the fourth article in a series that explores various aspects of localisation in ASP.NET Core Razor Pages applications. This article concentrates on the SEO aspects of localisation as they pertain to URL management, and how to utilise the RouteDataRequestCultureProvider to help you manage that. </p>
        </section>
</div>
<div id="widgets">
    <div class="banner">
        
            <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
            <!-- Alternating Bottom Leaderboard -->
            <ins class="adsbygoogle"
                 style="display:inline-block;width:728px;height:90px"
                 data-ad-client="ca-pub-8046723421340367"
                 data-ad-slot="6233042939"></ins>
            <script>
                (adsbygoogle = window.adsbygoogle || []).push({});
            </script>
        
    </div>
</div>
<section id="paging">
    <div><ul class="pagination"><li class="page-item active"><a class="page-link" href="/index?pagenumber=1"  title="Click to go to page 1">1</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=2"  title="Click to go to page 2">2</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=3"  title="Click to go to page 3">3</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=4"  title="Click to go to page 4">4</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=5"  title="Click to go to page 5">5</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=6"  title="Click to go to page 6">6</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=7"  title="Click to go to page 7">7</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=8"  title="Click to go to page 8">8</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=9"  title="Click to go to page 9">9</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=10"  title="Click to go to page 10">10</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=11"  title="Click to go to page 11">11</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=12"  title="Click to go to page 12">12</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=13"  title="Click to go to page 13">13</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=14"  title="Click to go to page 14">14</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=15"  title="Click to go to page 15">15</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=16"  title="Click to go to page 16">16</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=17"  title="Click to go to page 17">17</a></li>
<li class="page-item "><a class="page-link" href="/index?pagenumber=18"  title="Click to go to page 18">18</a></li>
</ul></div>
</section>

            </div>
            <div class="col-3 side-bar">
                <div id="other-projects">
                    <h4>Other Sites</h4>
                    <ul style="list-style-type:none;padding-left:0;">
                        <li><a href="https://www.learnrazorpages.com">Learn Razor Pages</a></li>
                        <li><a href="https://www.learnblazor.com">Learn Blazor</a></li>
                    </ul>
                </div>
                <div id="razor-pages-in-action" class="mb-3">
                    <a href="https://www.manning.com/books/asp-net-core-razor-pages-in-action?utm_source=mikebrind&utm_medium=affiliate&utm_campaign=book_brind_razor_7_26_21&a_aid=mikebrind&a_bid=f71bcc8c">
                        <img src="https://images.manning.com/360/480/resize/book/3/cfa582b-9672-4cca-9214-30e7dd893309/Brind-HI.png" class="img-fluid" alt="Buy ASP.NET Core Razor Pages In Action" title="Buy Razor Pages In Action" aria-label="Buy Razor Pages In Action" />
                    </a>
                </div>
                <div id="med-rect-ad">
                    
                        <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

                        <ins class="adsbygoogle"
                             style="display:inline-block;width:336px;height:280px"
                             data-ad-client="ca-pub-8046723421340367"
                             data-ad-slot="8735003335"></ins>
                        <script>
                            (adsbygoogle = window.adsbygoogle || []).push({});
                        </script>
                    
                </div>

                
<h4>Categories</h4>
<ul class="category-list">
        <li>
            <a href="/category/43/net-6">.NET 6 (9)</a>
        </li>
        <li>
            <a href="/category/44/net-7">.NET 7 (3)</a>
        </li>
        <li>
            <a href="/category/14/ado-net">ADO.NET (24)</a>
        </li>
        <li>
            <a href="/category/5/ajax">AJAX (17)</a>
        </li>
        <li>
            <a href="/category/4/asp-net-2-0">ASP.NET 2.0 (39)</a>
        </li>
        <li>
            <a href="/category/19/asp-net-3-5">ASP.NET 3.5 (43)</a>
        </li>
        <li>
            <a href="/category/33/asp-net-5">ASP.NET 5 (16)</a>
        </li>
        <li>
            <a href="/category/36/asp-net-core">ASP.NET Core (72)</a>
        </li>
        <li>
            <a href="/category/38/asp-net-identity">ASP.NET Identity (3)</a>
        </li>
        <li>
            <a href="/category/22/asp-net-mvc">ASP.NET MVC (90)</a>
        </li>
        <li>
            <a href="/category/26/asp-net-web-forms">ASP.NET Web Forms (32)</a>
        </li>
        <li>
            <a href="/category/27/asp-net-web-pages">ASP.NET Web Pages (89)</a>
        </li>
        <li>
            <a href="/category/39/blazor">Blazor (11)</a>
        </li>
        <li>
            <a href="/category/24/book-review">Book Review (7)</a>
        </li>
        <li>
            <a href="/category/42/bootstrap">Bootstrap (4)</a>
        </li>
        <li>
            <a href="/category/3/c">C# (40)</a>
        </li>
        <li>
            <a href="/category/1/classic-asp">Classic ASP (13)</a>
        </li>
        <li>
            <a href="/category/15/css">CSS (4)</a>
        </li>
        <li>
            <a href="/category/23/entity-framework">Entity Framework (34)</a>
        </li>
        <li>
            <a href="/category/34/epplus">EPPlus (4)</a>
        </li>
        <li>
            <a href="/category/25/extension-method">Extension Method (6)</a>
        </li>
        <li>
            <a href="/category/18/general">General (12)</a>
        </li>
        <li>
            <a href="/category/7/html">HTML (8)</a>
        </li>
        <li>
            <a href="/category/30/html5">HTML5 (3)</a>
        </li>
        <li>
            <a href="/category/20/itextsharp">iTextSharp (12)</a>
        </li>
        <li>
            <a href="/category/6/javascript">Javascript (22)</a>
        </li>
        <li>
            <a href="/category/21/jquery">jQuery (34)</a>
        </li>
        <li>
            <a href="/category/17/linq">LINQ (5)</a>
        </li>
        <li>
            <a href="/category/41/localization">Localization (4)</a>
        </li>
        <li>
            <a href="/category/10/ms-access">MS Access (17)</a>
        </li>
        <li>
            <a href="/category/29/razor">Razor (55)</a>
        </li>
        <li>
            <a href="/category/37/razor-pages">Razor Pages (50)</a>
        </li>
        <li>
            <a href="/category/45/sass">Sass (1)</a>
        </li>
        <li>
            <a href="/category/35/seo">SEO (3)</a>
        </li>
        <li>
            <a href="/category/8/sql">SQL (6)</a>
        </li>
        <li>
            <a href="/category/9/sql-server-express">SQL Server Express (2)</a>
        </li>
        <li>
            <a href="/category/40/typescript">TypeScript (1)</a>
        </li>
        <li>
            <a href="/category/16/vb-net">VB.Net (29)</a>
        </li>
        <li>
            <a href="/category/2/vbscript">VBScript (11)</a>
        </li>
        <li>
            <a href="/category/12/visual-studio">Visual Studio (5)</a>
        </li>
        <li>
            <a href="/category/32/web-api">Web API (1)</a>
        </li>
        <li>
            <a href="/category/31/webgrid">WebGrid (16)</a>
        </li>
        <li>
            <a href="/category/28/webmatrix">WebMatrix (80)</a>
        </li>
</ul>
                <div id="half-page-ad">
                    
                        <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
                        <!-- Mikesdotnetting Half Page -->
                        <ins class="adsbygoogle"
                             style="display:block"
                             data-ad-client="ca-pub-8046723421340367"
                             data-ad-slot="5362965212"
                             data-ad-format="auto"
                             data-full-width-responsive="true"></ins>
                        <script>
                            (adsbygoogle = window.adsbygoogle || []).push({});
                        </script>
                    
                    <h4>Archive</h4>
    <h5 class="archive-head">2023</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2023/4">April 2023 (1)</a>
            </li>
            <li>
                <a href="/archive/2023/3">March 2023 (1)</a>
            </li>
            <li>
                <a href="/archive/2023/1">January 2023 (1)</a>
            </li>
    </ul>
    <h5 class="archive-head">2022</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2022/11">November 2022 (3)</a>
            </li>
            <li>
                <a href="/archive/2022/10">October 2022 (1)</a>
            </li>
            <li>
                <a href="/archive/2022/9">September 2022 (1)</a>
            </li>
            <li>
                <a href="/archive/2022/8">August 2022 (1)</a>
            </li>
    </ul>
    <h5 class="archive-head">2021</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2021/12">December 2021 (1)</a>
            </li>
            <li>
                <a href="/archive/2021/10">October 2021 (1)</a>
            </li>
            <li>
                <a href="/archive/2021/7">July 2021 (2)</a>
            </li>
    </ul>
    <h5 class="archive-head">2020</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2020/11">November 2020 (3)</a>
            </li>
            <li>
                <a href="/archive/2020/6">June 2020 (2)</a>
            </li>
            <li>
                <a href="/archive/2020/5">May 2020 (1)</a>
            </li>
            <li>
                <a href="/archive/2020/1">January 2020 (1)</a>
            </li>
    </ul>
    <h5 class="archive-head">2019</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2019/12">December 2019 (3)</a>
            </li>
            <li>
                <a href="/archive/2019/11">November 2019 (3)</a>
            </li>
            <li>
                <a href="/archive/2019/10">October 2019 (2)</a>
            </li>
            <li>
                <a href="/archive/2019/8">August 2019 (2)</a>
            </li>
            <li>
                <a href="/archive/2019/7">July 2019 (2)</a>
            </li>
            <li>
                <a href="/archive/2019/5">May 2019 (1)</a>
            </li>
            <li>
                <a href="/archive/2019/4">April 2019 (2)</a>
            </li>
            <li>
                <a href="/archive/2019/3">March 2019 (1)</a>
            </li>
            <li>
                <a href="/archive/2019/2">February 2019 (1)</a>
            </li>
    </ul>
    <h5 class="archive-head">2018</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2018/10">October 2018 (3)</a>
            </li>
            <li>
                <a href="/archive/2018/9">September 2018 (4)</a>
            </li>
            <li>
                <a href="/archive/2018/8">August 2018 (2)</a>
            </li>
            <li>
                <a href="/archive/2018/7">July 2018 (2)</a>
            </li>
            <li>
                <a href="/archive/2018/5">May 2018 (2)</a>
            </li>
            <li>
                <a href="/archive/2018/3">March 2018 (2)</a>
            </li>
            <li>
                <a href="/archive/2018/2">February 2018 (1)</a>
            </li>
            <li>
                <a href="/archive/2018/1">January 2018 (1)</a>
            </li>
    </ul>
    <h5 class="archive-head">2017</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2017/9">September 2017 (2)</a>
            </li>
            <li>
                <a href="/archive/2017/7">July 2017 (2)</a>
            </li>
            <li>
                <a href="/archive/2017/5">May 2017 (3)</a>
            </li>
            <li>
                <a href="/archive/2017/2">February 2017 (2)</a>
            </li>
    </ul>
    <h5 class="archive-head">2016</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2016/10">October 2016 (2)</a>
            </li>
            <li>
                <a href="/archive/2016/9">September 2016 (1)</a>
            </li>
            <li>
                <a href="/archive/2016/7">July 2016 (2)</a>
            </li>
            <li>
                <a href="/archive/2016/6">June 2016 (1)</a>
            </li>
            <li>
                <a href="/archive/2016/5">May 2016 (1)</a>
            </li>
            <li>
                <a href="/archive/2016/4">April 2016 (1)</a>
            </li>
            <li>
                <a href="/archive/2016/3">March 2016 (2)</a>
            </li>
            <li>
                <a href="/archive/2016/2">February 2016 (1)</a>
            </li>
            <li>
                <a href="/archive/2016/1">January 2016 (2)</a>
            </li>
    </ul>
    <h5 class="archive-head">2015</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2015/12">December 2015 (3)</a>
            </li>
            <li>
                <a href="/archive/2015/10">October 2015 (3)</a>
            </li>
            <li>
                <a href="/archive/2015/9">September 2015 (2)</a>
            </li>
            <li>
                <a href="/archive/2015/8">August 2015 (2)</a>
            </li>
            <li>
                <a href="/archive/2015/7">July 2015 (4)</a>
            </li>
            <li>
                <a href="/archive/2015/6">June 2015 (2)</a>
            </li>
            <li>
                <a href="/archive/2015/5">May 2015 (2)</a>
            </li>
            <li>
                <a href="/archive/2015/4">April 2015 (4)</a>
            </li>
            <li>
                <a href="/archive/2015/3">March 2015 (5)</a>
            </li>
            <li>
                <a href="/archive/2015/2">February 2015 (4)</a>
            </li>
            <li>
                <a href="/archive/2015/1">January 2015 (4)</a>
            </li>
    </ul>
    <h5 class="archive-head">2014</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2014/10">October 2014 (2)</a>
            </li>
            <li>
                <a href="/archive/2014/8">August 2014 (1)</a>
            </li>
            <li>
                <a href="/archive/2014/7">July 2014 (1)</a>
            </li>
            <li>
                <a href="/archive/2014/6">June 2014 (12)</a>
            </li>
            <li>
                <a href="/archive/2014/5">May 2014 (11)</a>
            </li>
            <li>
                <a href="/archive/2014/4">April 2014 (1)</a>
            </li>
            <li>
                <a href="/archive/2014/3">March 2014 (2)</a>
            </li>
            <li>
                <a href="/archive/2014/2">February 2014 (2)</a>
            </li>
            <li>
                <a href="/archive/2014/1">January 2014 (1)</a>
            </li>
    </ul>
    <h5 class="archive-head">2013</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2013/12">December 2013 (1)</a>
            </li>
            <li>
                <a href="/archive/2013/11">November 2013 (2)</a>
            </li>
            <li>
                <a href="/archive/2013/10">October 2013 (2)</a>
            </li>
            <li>
                <a href="/archive/2013/8">August 2013 (3)</a>
            </li>
            <li>
                <a href="/archive/2013/7">July 2013 (1)</a>
            </li>
            <li>
                <a href="/archive/2013/6">June 2013 (1)</a>
            </li>
            <li>
                <a href="/archive/2013/5">May 2013 (1)</a>
            </li>
            <li>
                <a href="/archive/2013/2">February 2013 (3)</a>
            </li>
            <li>
                <a href="/archive/2013/1">January 2013 (2)</a>
            </li>
    </ul>
    <h5 class="archive-head">2012</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2012/12">December 2012 (4)</a>
            </li>
            <li>
                <a href="/archive/2012/11">November 2012 (1)</a>
            </li>
            <li>
                <a href="/archive/2012/10">October 2012 (1)</a>
            </li>
            <li>
                <a href="/archive/2012/9">September 2012 (5)</a>
            </li>
            <li>
                <a href="/archive/2012/8">August 2012 (2)</a>
            </li>
            <li>
                <a href="/archive/2012/7">July 2012 (2)</a>
            </li>
            <li>
                <a href="/archive/2012/6">June 2012 (3)</a>
            </li>
            <li>
                <a href="/archive/2012/5">May 2012 (1)</a>
            </li>
            <li>
                <a href="/archive/2012/2">February 2012 (1)</a>
            </li>
            <li>
                <a href="/archive/2012/1">January 2012 (1)</a>
            </li>
    </ul>
    <h5 class="archive-head">2011</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2011/12">December 2011 (2)</a>
            </li>
            <li>
                <a href="/archive/2011/10">October 2011 (1)</a>
            </li>
            <li>
                <a href="/archive/2011/9">September 2011 (1)</a>
            </li>
            <li>
                <a href="/archive/2011/8">August 2011 (6)</a>
            </li>
            <li>
                <a href="/archive/2011/5">May 2011 (1)</a>
            </li>
            <li>
                <a href="/archive/2011/4">April 2011 (1)</a>
            </li>
            <li>
                <a href="/archive/2011/3">March 2011 (2)</a>
            </li>
            <li>
                <a href="/archive/2011/1">January 2011 (5)</a>
            </li>
    </ul>
    <h5 class="archive-head">2010</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2010/12">December 2010 (3)</a>
            </li>
            <li>
                <a href="/archive/2010/10">October 2010 (4)</a>
            </li>
            <li>
                <a href="/archive/2010/9">September 2010 (2)</a>
            </li>
            <li>
                <a href="/archive/2010/8">August 2010 (2)</a>
            </li>
            <li>
                <a href="/archive/2010/7">July 2010 (9)</a>
            </li>
            <li>
                <a href="/archive/2010/6">June 2010 (2)</a>
            </li>
            <li>
                <a href="/archive/2010/5">May 2010 (7)</a>
            </li>
            <li>
                <a href="/archive/2010/4">April 2010 (1)</a>
            </li>
            <li>
                <a href="/archive/2010/3">March 2010 (1)</a>
            </li>
            <li>
                <a href="/archive/2010/2">February 2010 (4)</a>
            </li>
            <li>
                <a href="/archive/2010/1">January 2010 (2)</a>
            </li>
    </ul>
    <h5 class="archive-head">2009</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2009/12">December 2009 (4)</a>
            </li>
            <li>
                <a href="/archive/2009/11">November 2009 (2)</a>
            </li>
            <li>
                <a href="/archive/2009/10">October 2009 (4)</a>
            </li>
            <li>
                <a href="/archive/2009/9">September 2009 (3)</a>
            </li>
            <li>
                <a href="/archive/2009/8">August 2009 (1)</a>
            </li>
            <li>
                <a href="/archive/2009/7">July 2009 (2)</a>
            </li>
            <li>
                <a href="/archive/2009/6">June 2009 (4)</a>
            </li>
            <li>
                <a href="/archive/2009/5">May 2009 (3)</a>
            </li>
            <li>
                <a href="/archive/2009/4">April 2009 (1)</a>
            </li>
            <li>
                <a href="/archive/2009/3">March 2009 (1)</a>
            </li>
            <li>
                <a href="/archive/2009/2">February 2009 (2)</a>
            </li>
            <li>
                <a href="/archive/2009/1">January 2009 (5)</a>
            </li>
    </ul>
    <h5 class="archive-head">2008</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2008/12">December 2008 (4)</a>
            </li>
            <li>
                <a href="/archive/2008/11">November 2008 (5)</a>
            </li>
            <li>
                <a href="/archive/2008/10">October 2008 (6)</a>
            </li>
            <li>
                <a href="/archive/2008/7">July 2008 (1)</a>
            </li>
            <li>
                <a href="/archive/2008/5">May 2008 (3)</a>
            </li>
            <li>
                <a href="/archive/2008/4">April 2008 (2)</a>
            </li>
    </ul>
    <h5 class="archive-head">2007</h5>
    <ul class="archive-list">
            <li>
                <a href="/archive/2007/11">November 2007 (5)</a>
            </li>
            <li>
                <a href="/archive/2007/9">September 2007 (1)</a>
            </li>
            <li>
                <a href="/archive/2007/8">August 2007 (8)</a>
            </li>
            <li>
                <a href="/archive/2007/7">July 2007 (2)</a>
            </li>
            <li>
                <a href="/archive/2007/6">June 2007 (3)</a>
            </li>
            <li>
                <a href="/archive/2007/5">May 2007 (20)</a>
            </li>
            <li>
                <a href="/archive/2007/4">April 2007 (14)</a>
            </li>
            <li>
                <a href="/archive/2007/3">March 2007 (3)</a>
            </li>
    </ul>

                </div>
            </div>
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2006 - 2026 - Mike Brind - <a href="/privacy">Privacy</a>
        </div>
    </footer>
    
    
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" crossorigin="anonymous" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
        </script>
<script>(window.jQuery||document.write("\u003Cscript src=\u0022/lib/jquery/dist/jquery.min.js\u0022 crossorigin=\u0022anonymous\u0022 integrity=\u0022sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=\u0022\u003E\u003C/script\u003E"));</script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.bundle.min.js" crossorigin="anonymous" integrity="sha256-E/V4cWE4qvAeO5MOhjtGtqDzPndRO1LBk8lJ/PR7CA4=">
        </script>
<script>(window.jQuery && window.jQuery.fn && window.jQuery.fn.modal||document.write("\u003Cscript src=\u0022/lib/bootstrap/dist/js/bootstrap.bundle.min.js\u0022 crossorigin=\u0022anonymous\u0022 integrity=\u0022sha256-E/V4cWE4qvAeO5MOhjtGtqDzPndRO1LBk8lJ/PR7CA4=\u0022\u003E\u003C/script\u003E"));</script>
        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-1264020-9"></script>
        <script>
            window.dataLayer = window.dataLayer || [];
            function gtag() { dataLayer.push(arguments); }
            gtag('js', new Date());

            gtag('config', 'UA-1264020-9');
        </script>
    
    <script src="/js/site.js?v=06vj6uZbN2EFuGSEdLx4B02zGMnlJVrP7RC_10ok3NY"></script>

    
  
</body>
</html>
