You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core MVC视图中实现三个搜索筛选框均匀排列

问题背景

我已经按照ASP.NET Core MVC入门教程完成了电影管理示例项目的开发,新增了2个下拉筛选框和1个搜索字符串输入框的功能,现在需要让这三个搜索控件在输出视图的顶部均匀分布,但一直未找到实现方法。

我为了方便调试,新建了~Views\Shared\_My_Layout.cshtml文件并在_ViewStart.cshtml中引用,引用代码如下:

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

经测试该布局文件生效,所有调试都基于此文件而非VS2019中默认的_Layout.cshtml。注意_ViewStart中的路径引用使用正斜杠,和Windows路径的反斜杠存在格式差异,但正斜杠是_ViewStart.cshtml唯一支持的写法,我也通过修改布局文件的样式输出验证过文件引用正常。

我在修改_My_Layout.cshtml时发现,视图上的"All"和"Title"标签来自~Views\Movies\Index.cshtml,但浏览器的页面展示主要受_My_Layout中以下代码控制:

<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>

上述代码拷贝自原始_Layout.cshtml,我查阅了Bootstrap Navbar文档,多次修改_My_Layout.cshtml中以<button class="navbar-toggler">开头的代码行,按照文档调整target和aria相关参数都没有效果,也未找到适配Web应用场景的同类案例。

初始页面效果

问题补充

我的开发者工具输出如下:
开发者工具捕获结果

我确认_My_Layout.cshtml中的上述代码是相关逻辑段,代码引用了Bootstrap Navbar form-inline,但找不到适配本场景的使用指南。我已经下载了最新的bootstrap 5.02并在布局中引用,最初怀疑是bootstrap预设的列参数控制了控件宽度,打算修改bootstrap网格配置。

思路调整

我精简了_My_Layout中的冗余代码逐行测试,发现只有@RenderBody()和数据库表格输出、控件展示相关,因此筛选框和表格的样式配置只能在Index视图中修改,需要在保留功能的前提下实现三个控件的均匀布局,请问有没有相关解决方案或者参考文档?

_My_Layout.cshtml完整代码如下:

<!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>

最终实现方案

后续我已通过以下代码实现需求:将展示代码包裹在container中保留asp输入类型,新增hidden输入类型解决筛选框旁的幽灵链接导致的列对齐问题,实现代码如下:

<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>

实现效果如下图:
最终实现效果


内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:27:03