MVC 一个控制器多个索引视图

MVC One controller many Index view

我搜索了很多主题,但找不到问题的答案。我正在使用 MVC 6。

我有以下结构:

> Controllers
  > AccountController
> Views
  > Account
      Index.cshtml
    > MyReviews
        Index.cshtml

AccountController 看起来像:

//
// GET: /Account/Index
[AllowAnonymous] //temp
[HttpGet]
public IActionResult Index()
{
    return View();
}
//
// GET: /Account/MyReviews/Index
[AllowAnonymous] //temp
[HttpGet]
[Route("/Account/MyReviews/")]
public IActionResult Index()
{
    return View();
}

如果它有不同的名称并放置在单独的控制器中,它的工作正常:

public class MyReviewsController : Controller
{
    //
    // GET: /Account/MyReviews/Default
    [AllowAnonymous]
    [HttpGet]
    [Route("/Account/MyReviews/")]
    public IActionResult Default()
    {
        return View();
    }
}

我想让 MyReviews 仅使用 AccountController:

http://my.domain/Account/MyReviews/

首先,如果你想在 1 个控制器中执行多个索引操作,你必须启用属性路由。要启用此功能,请将以下内容添加到 RouteConfig.cs

 routes.MapMvcAttributeRoutes();

在此之后,将 Account 文件夹中的 MyReviews\Index.cshtml 重命名为 MyReviewsIndex.cshtml(删除 MyReviews 文件夹)。所以它看起来像下面

> Controllers
  > AccountController
> Views
  > Account
      Index.cshtml
      MyReviewsIndex.cshtml

//
// GET: /Account/Index
[AllowAnonymous] //temp
[HttpGet]
public IActionResult Index()
{
    return View();
}
//
// GET: /Account/MyReviews/Index
[AllowAnonymous] //temp
[HttpGet]
[Route("Account/MyReviews")]
public IActionResult MyReviewsIndex()
{
    return View();
}

现在您可以通过以下方式访问 2 个操作:

http://localhost/account 
http://localhost/account/myreviews