Hello!

Today we will look at how you can create a new page in BlazorServer and add it to the menu.

Add new page

To do this, right-click on the Pages folder and select Razor Component...

RazorPages

The following window will appear in which you need to enter the name and click Add.

AddPage

The page will be created with the following content:

<h3>Test1</h3>

@code {

}

To be able to open it in the browser at the beginning of the file you need to add @page" /test1" where test1 is the name of the endpoint. And now run the application and enter it in the browser localhost:5001/test1

TestPage1

But our page is not displayed in the menu. Let’s add it now.

Add page in menu

Select the file with menu Shared/NavMenu.razor

Menu

The file has the following content

<div class="top-row pl-4 navbar navbar-dark">
    <a class="navbar-brand" href="">BlazorLearn</a>
    <button class="navbar-toggler" @onclick="ToggleNavMenu">
        <span class="navbar-toggler-icon"></span>
    </button>
</div>

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <ul class="nav flex-column">
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </li>
    </ul>
</div>

@code {
    private bool collapseNavMenu = true;

    private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;

    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }
}

What we need is to add another element to @NavMenuCssClass, it is this div that is responsible for displaying the menu elements. I will add the following item

        <li class="nav-item px-3">
            <NavLink class="nav-link" href="test1">
                <span class="oi oi-aperture" aria-hidden="true"></span> Test1
            </NavLink>
        </li>

href - this is the endpoint of the page <span class="oi oi-aperture" aria-hidden="true"></span> - adds an icon to the menu item

Start applications and get the result.

Test1Menu

Folder structure

Pages can be organized into folders. For example, I will create a Demo folder inside Pages and move the page Test1.razor to it.

DemoFolder

After launching the application, the page will still work, even if we change it location. But with such a folder structure, it would be more logical to reflect this in the endopint. To do this in Test1.razor i will change the endpoint from@page "/test1"to@page "/demo/test1". Also, I need to make change in the NavMenu.razor file from href = "test1" to href = "demo/test1".

DemoPage