一个控制器用于不同的视图MVC

时间:2018-04-17 09:56:59

标签: c# typescript asp.net-core

我想知道是否最好将一个控制器用于加载大致相同数据的多个视图,或者为每个视图使用一个控制器。

如果可以像这样使用控制器:

[Route("api/[controller]")]
    public class MultiplePagesController : Controller
    {

        [HttpGet]
        public async Task<IActionResult> GetA()
        { ... return viewA }

        [HttpGet]
    public async Task<IActionResult> GetB()
    { ... return viewB }
}

在我的serviceViewA.ts中:

getA() {
        return this.http.get<InterfaceA>(`${this.baseUrl}/api/multiplepages/`);
    }

我的serviceViewB.ts:

getB() {
            return this.http.get<InterfaceB>(`${this.baseUrl}/api/multiplepages/`);
        }

因为我们假设viewA返回书籍数据,而viewB返回书籍和计算机的数据。

我正在使用MVC .NET CORE

1 个答案:

答案 0 :(得分:2)

事实上,如果它使用一个控制器(和方法)是一个好主意,如果它完全相同,你可以通过这种方式减少代码,使其易于在一个地方维护和修改,而不是全部该项目。将其视为功能的容器。如果您有一个Book控制器,那么您将所有与书籍相关的方法放在那里,对于User,您将把所有用户方法放在那里。

至于你的第二个问题,那就违背了多态性。您的功能签名完全相同,如何区分?您需要为其指定不同的名称或接受参数(与其他功能或不同的数据类型不同)。

值得注意的是,您可以使用不同的方式命名您的函数以返回视图。

例如:

public async Task<IActionResult> GetViewA(){ // ... }

public async Task<IActionResult> GetViewB(){ // ... }

您可以输入:/Controller/GetViewB作为路径来调用这些视图。