ASP.NET MVC - 在视图中使用来自另一个Controller的数据

时间:2017-09-17 18:15:14

标签: asp.net asp.net-mvc

关于ASP.Net MVC的新手问题:我有一个项目,我管理两个“模型” - 让我们说“产品”和“客户”。每个Model都有自己的Controller和一组Views来实现基本的CRUD操作。

现在我想从不同的视图(比如说主页)列出所有产品和所有客户端。

我是否应该在产品和客户控制器中创建新方法以列出其项目并从主页的索引视图中调用这些方法? Home Controller是否应该调用产品和客户端方法?

我该如何正确解决这个问题?

Thansk提前!

佩德罗

1 个答案:

答案 0 :(得分:1)

这个问题的答案在某种程度上既是主观的,也是基于意见的。那就是说..

HomeController可以调用ProductClient相关方法来返回真正有效成为HomeIndexViewModel的内容ProductViewModel ClientViewModel }}和Model.ProductViewModel属性 - 您的视图将通过Model.ClientViewModelIndex等访问数据。

我会更进一步,添加一个业务流程组件,该组件将负责处理HomeController public class HomeController : Controller { private readonly IOrchestrator orchestrator; public HomeController() : this(IOrchestrator orchestrator) { } public HomeController(IOrchestrator orchestrator) { this.orchestrator = orchestrator; } public async Task<ActionResult> Index() { var homeIndexViewModel = await orchestrator.GetHomeProductsAndClientsAsync(); return View(homeIndexViewModel); } } 操作所需的请求和应用程序逻辑。这应该使您的控制器保持较薄并与后端分离。

GetHomeProductsAndClientsAsync()

FooOrchestrator显然是您的HomeIndexViewModel类的一种方法,它将处理应用程序逻辑以返回HomeController

将协调器作为接口传递给IOrchestratorFooOrchestrator,而不是实现IOrchestrator接口的let repeat ls n = let rec f l = function | 0 -> l | n -> f (List.rev_append ls l) (n-1) in List.rev (f [] n) 类,以便于依赖注入(尽管,恕我直言,没有DI,这种方法仍然有益。)

一些阅读:

  

"Never Mind the Controller, Here is the Orchestrator"(Dino Esposito)