C# 如何在controller-MVC中重载任务

C# 如何在controller-MVC中重载任务,c#,asp.net-mvc,asp.net-core,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,我的控制器中有两个任务,它们执行两个非常不同的操作 第一个任务为我的搜索栏提供了功能—它在搜索字段中显示用户请求搜索的数据 第二个任务只是返回一个视图,该视图与问题无关 只有在调用控制器的“索引”任务时,搜索栏的功能才会起作用。文档没有解释为什么必须将搜索栏功能放在索引任务中,但是必须这样做,否则会出现异常 我的问题是,我的索引任务中已经有了代码——要有两个索引控制器,我该怎么做?我试着在控制器中直接重载它,但没有成功 以下是我目前的代码供参考: public async Task<IAc

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

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

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

只有在调用控制器的“索引”任务时,搜索栏的功能才会起作用。文档没有解释为什么必须将搜索栏功能放在索引任务中,但是必须这样做,否则会出现异常

我的问题是,我的索引任务中已经有了代码——要有两个索引控制器,我该怎么做?我试着在控制器中直接重载它,但没有成功

以下是我目前的代码供参考:

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());
}
公共异步任务索引(字符串搜索字符串)
{
var course=来自_context.course中的m
选择m;
如果(!String.IsNullOrEmpty(searchString))
{
course=course.Where(s=>s.CourseName.Contains(searchString));
}
返回视图(wait course.ToListAsync());
}
//得到:当然
公共异步任务索引()
{
返回视图(wait_context.Course.toListSync());
}
我的前端代码:

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

@ViewData[“标题”]-SEWebPage03
  • 隐私
  • 课程
  • 教授

@RenderBody() @RenderSection(“脚本”,必需:false)
当尝试将名称更改为返回视图的任务时,出现以下错误 (我将任务名称更改为测试):

InvalidOperationException:未找到视图“测试”。搜索了以下地点:

/Views/Course/Testing.cshtml
/Views/Shared/Testing.cshtml
/页面/Shared/Testing.cshtml


您可以在表单中更改asp操作:

改变

<form asp-controller="Course" asp-action="Index">
            <p>
                <input type="text" name="SearchString">
                <input type="submit" value="Search" />
            </p>
        </form>
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());
}




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

改变

<form asp-controller="Course" asp-action="Index">
            <p>
                <input type="text" name="SearchString">
                <input type="submit" value="Search" />
            </p>
        </form>
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());
}
公共异步任务索引(字符串搜索字符串)
{
var course=来自_context.course中的m
选择m;
如果(!String.IsNullOrEmpty(searchString))
{
course=course.Where(s=>s.CourseName.Contains(searchString));
}
返回视图(wait course.ToListAsync());
}

公共异步任务搜索(字符串搜索字符串)
{
var course=来自_context.course中的m
选择m;
如果(!String.IsNullOrEmpty(searchString))
{
course=course.Where(s=>s.CourseName.Contains(searchString));
}
返回视图(“索引”,等待course.ToListAsync());
}

如果您一定要在搜索栏中使用索引,为什么不在其他索引中使用其他方法?为什么你真的需要2个索引?你能发布前端代码吗?正如@nalnpir所说的,您不需要绑定到“index”,您可以创建一个名为“Search”的方法或其他方法,您可以重载控制器将HttpPost/HttpGet属性放入的方法it@Leo谢谢你的建议!我尝试在这两种方法上重命名方法-当我将负责搜索的方法重命名为“search”时会出错,当我重命名另一个返回视图的索引函数时也会出错。我对这一切都不熟悉,不太明白为什么会这样。是的,我会用前端代码更新我的帖子!另外,我更新了我的帖子,当我试图更改另一个只返回view@mjwills ? 是的,如果你阅读下面的评论,你会看到我用错误更新了我的帖子。很难在堆栈溢出注释中格式化代码。