2

I have a working example of the movies tutorial. Get started with ASP.NET Core MVC

I have added functionality to now have 2 drop down boxes (filters) and a search string box. I can't work out how to get my display to have these 3 search boxes evenly spaced across the top of the output view (see image below)

For editing purposes (cause I don't know what I'm doing) I have created a ~Views\Shared\_My_Layout.cshtml and referenced it in _ViewStart.cshtml

@{
    ViewBag.Title = "Home Page";
    Layout = "~/Views/Shared/_My_Layout.cshtml";
}

I have tested this and it works. So all my experiments have been done using this file rather than the default _Layout.cshtml which is closed in VS 2019.

Note: I noticed the / \ conflict here between _ViewStart path/URL ref and my Windows path. But forward slashes only work in _ViewStart.cshtml. Besides, I made a cosmetic change in the file and changed the output so am confident that this is working.

I am editing _My_Layout.cshtml but can see that the "All" & "Title" labels (see image below) come from ~Views\Movies\Index.cshtml

However I can see that the following code in _My_Layout is largely responsible for the browser display:

 <header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container">
            <a class="navbar-brand" asp-area="" asp-controller="Movies" asp-action="Index">testbase1</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>

This has been copied from my original _Layout.cshtml because the file that I'm experimenting on is beginning to look ratty.

I have studied Navbar docs (getbootstrap.com) and tried many experimental edits in _My_Layout.cshtml without making any break through. I have tried various changes to the code line beginning with <button class="navbar-toggler">. Changing parameters as per the docs to target and aria controls.

I have googled and can't find anything close to my example. Most are web pages not web app output.

Does anyone know a solution or docs that would help?

enter image description here

[Question Edit]

My dev tools output. [Click on Filter - Capture dev tools

I'm pretty sure the code above (_My_Layout.cshtml) is the relevant section. These lines reference bootstrap.Bootstrap Navbar form-inline But I can't find any guides on how to use this in my example.

I have downloaded latest bootstrap 5.02 and am referencing this in Layout. I was also going to take a look at editing the bootstrap grid because I get the feeling that the button/field widths on my app are being formatted by pre-set column parameters. Just a hunch.

*** Complete change of thinking *** I have edited out all redundant code from _My_Layout and tested every line. Conclusion is that '@Renderbody()' is the only relevant statement concerning database table output/display. Therefore table output display & filter boxes can only be changed from view index. The question is how to do this while retaining functionality?

'<!DOCTYPE html>
<html lang="en">
<head>
    
<!-- for this file _My_Layout.cshtml using files from a working dir-->
    <link rel="stylesheet" href="~/wrk/bootstrap.min.css" />
    <link rel="stylesheet" href="~/wrk/site.css" />

</head>
<body>
    <header>
        <div class="container">
            <!-- this code determines position & appearance of testbase1 Home Privacy Hello xxx@email Logout-->
            <!-- testbase1 controlled by Movies, Privacy by Home, login controlled by asp-area Identity-->
            <nav class="navbar navbar-expand-lg navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3" />
            <a class="navbar-brand" asp-area="" asp-controller="Movies" asp-action="Index">testbase1</a>
            <nav class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                <ul class="navbar-nav flex-grow-1">
                    <!-- this code for separation (spacing) of login text at top of page -->
                    <li class="nav-item"></li>
                </ul>
                <partial name="_LoginPartial" />
            </nav>
        </div>
    </header>
    <!-- this code responsible for main output - without it no body to page. Top & bottom bar navigation links only -->
    <div class="container">
        <main role="main" class="pb-6">
            @RenderBody()
        </main>
    </div>
    <!-- removed js script source refs leaving self explainatory footer code-->
    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - testbase1 - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
        </div>
    </footer>
    
    <!-- required for Edit functionality -->
    @await RenderSectionAsync("Scripts", required: false) 
</body>
    </html>'

Successfully answered this question using the following code. I enclosed the display code in a container and retained the asp input types. The 'hidden' input types were required otherwise I got phantom links beside the filter boxes making them out of alignment with the column boundary. Thanks to Zhi for input.

<form asp-controller="Movies" asp-action="Index" method="get">
            <container>
                <div class="row">
                    <div class="col-sm-4">
                        <input type="submit" value="Filter"/>
                        Title: <input type="text" asp-for="SearchString" />
                    </div>

                    <div class="col-sm-4">
                        <input type="hidden" value="" class="btn btn-default"/>
                        <select asp-for="MovieGenre" asp-items="Model.Genres">
                            <option value="">All</option>
                        </select>
                    </div>

                    <div class="col-sm-4">
                        <input type="hidden" value="" class="btn btn-default" />
                        <select asp-for="MovieRating" asp-items="Model.Rating">
                            <option value="">All</option>
                        </select>
                    </div>

                </div>
            </container>
        </form>

enter image description here

1 Answer 1

1

I have added functionality to now have 2 drop down boxes (filters) and a search string box. I can't work out how to get my display to have these 3 search boxes evenly spaced across the top of the output view (see image below)

For the filter controls, it should be in the Index view page, instead of the layout.cshtml page.

To display the filter controls evenly spaced across the view, you can refer the following code:

<form asp-controller="Movies" asp-action="Index">
    <div class="row">
        <div class="col-4 mb-4">
            <select class="form-control">
                <option value="">All</option>
            </select>
        </div>
        <div class="col-4 mb-4">
            <select class="form-control">
                <option value="">All</option>
            </select>
        </div>
        <div class="form-inline col-4 mb-4">
            <div class="form-group">
                <input type="text" id="SearchString" name="SearchString" class="form-control" placeholder="Title" />
                <button class="btn btn-outline-secondary" type="submit">Filter</button>
            </div>
        </div>
    </div>
</form>

The result as below:

enter image description here

Sign up to request clarification or add additional context in comments.

7 Comments

Thanks Zhi for your contribution. Unfortunately for my solution your code does not work. Your layout is correct. But my functionality is lost. For my code I can see the following output using Chrome/dev tools. Select#MovieGenre 154x25, Select#MovieRating 46x25 Input#SearchString 182x30 To my way of thinking this is determined in Layout by way of ~/css/bootstrap.min.css or ~/css/site.css though not sure.
Hi @Dave, try to use F12 developer Network tools to check whether the relate CSS file is load success or not? Besides, can you share the code about the layout page and the relate CSS file, so that we could base on your code to reproduce the problem.
Hi @Zhi thank you. Have supplied additional content to question.
From the F12 screenshot, the bootstrap CSS style was load success, for the bootstrap js file, you could check the file path. Besides, I want to confirm with you about that, are you sure you want to change the style for the navbar in the header, instead of the filter control? As mentioned in my reply, the navbar is in the header and the filter control should in the Index view page, you can refer this screenshot. Whether you want to add the filter control in the header navbar?
thank you. I have spent a couple of days learning about interesting subjects (bootstrap, css) that have nothing to do with my display issues. I think you are correct. I will try (again) working with your suggestions in Index View page. Appreciate your screenshot. Makes perfect sense. If you are interested I have added my Layout file to the original question.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.