如何重载控制器中的任务-MVC

时间:2020-11-03 02:07:05

标签: c# asp.net-mvc asp.net-core asp.net-core-mvc

我的控制器中有2个任务,它们执行2个非常不同的动作。

第一个任务为我的搜索栏提供了功能-它在搜索字段中显示用户请求搜索的数据。

第二个任务只是返回一个视图,该视图与问题无关。

仅当我调用控制器的“索引”任务时,搜索栏的功能才起作用。该文档没有说明为什么必须将搜索栏功能放在索引任务中,但是必须这样做,否则您将获得异常。

我的问题是我的索引任务中已经有代码-要拥有2个索引控制器该怎么办?我尝试直接在控制器中重载它,但是它没有用。

这是我目前可供参考的代码:

public async Task<IActionResult> Index(string searchString)
{
        var course = from m in _context.Course
                     select m;

        if (!String.IsNullOrEmpty(searchString))
        {
            course = course.Where(s => s.CourseName.Contains(searchString));
        }
     
        return View(await course.ToListAsync());
}

// GET: Course
public async Task<IActionResult> Index()
{
    return View(await _context.Course.ToListAsync());
}

我的前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - SEWebPage03</title>
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
    <header>
        <div class="navbar-container">
            <ul class="navbar-items">
                <li class="nav-item">
                    <a class="nav-link" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" asp-area="" asp-controller="Course" asp-action="Index">Courses</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" asp-area="" asp-controller="Professor" asp-action="Index">Professors</a>
                </li>
            </ul>
        </div>

        <form asp-controller="Course" asp-action="Index">
            <p>
                <input type="text" name="SearchString">
                <input type="submit" value="Search" />
            </p>
        </form>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
    
    </footer>
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>
    @RenderSection("Scripts", required: false)
</body>
</html>

当尝试将名称更改为返回视图的任务时,出现此错误 (我将任务名称更改为测试):

InvalidOperationException:找不到视图“测试”。搜索了以下位置:

/Views/Course/Testing.cshtml
/Views/Shared/Testing.cshtml
/Pages/Shared/Testing.cshtml

1 个答案:

答案 0 :(得分:0)

您可以更改表格中的asp-action:

更改

<form asp-controller="Course" asp-action="Index">
            <p>
                <input type="text" name="SearchString">
                <input type="submit" value="Search" />
            </p>
        </form>

 <form asp-controller="Course" asp-action="Search">
                <p>
                    <input type="text" name="SearchString">
                    <input type="submit" value="Search" />
                </p>
            </form>

然后您需要更改您的ActionName和返回的ViewName:

更改

public async Task<IActionResult> Index(string searchString)
{
        var course = from m in _context.Course
                     select m;

        if (!String.IsNullOrEmpty(searchString))
        {
            course = course.Where(s => s.CourseName.Contains(searchString));
        }
     
        return View(await course.ToListAsync());
}

public async Task<IActionResult> Search(string searchString)
{
        var course = from m in _context.Course
                     select m;

        if (!String.IsNullOrEmpty(searchString))
        {
            course = course.Where(s => s.CourseName.Contains(searchString));
        }
     
        return View("Index",await course.ToListAsync());
}
相关问题