如何解决如何重载控制器中的任务-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
解决方法
您可以更改表格中的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());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。