Model view controller 如何转到另一个视图来创建实体

Model view controller 如何转到另一个视图来创建实体,model-view-controller,views,controllers,Model View Controller,Views,Controllers,我是asp.NETMVC新手,必须决定如何实现以下内容。谁能给我指一下正确的方向吗 我有一个控制器,它的目的是创造客户,所有的工作都很好 我有另一个控制器,它为vew提供创建发票的服务。但要创建发票,我需要搜索所有正常工作的客户。如果我找不到客户,我需要提供“创建客户”视图,创建客户,然后返回“发票创建” 因此,我的问题是如何从我的发票控制器获取客户控制器来创建客户,获取客户详细信息并将这些详细信息插入我的发票视图 这些控制器/视图位于不同的区域请记住,控制器服务于特定的请求获取客户、查看客户、

我是asp.NETMVC新手,必须决定如何实现以下内容。谁能给我指一下正确的方向吗

我有一个控制器,它的目的是创造客户,所有的工作都很好

我有另一个控制器,它为vew提供创建发票的服务。但要创建发票,我需要搜索所有正常工作的客户。如果我找不到客户,我需要提供“创建客户”视图,创建客户,然后返回“发票创建”

因此,我的问题是如何从我的发票控制器获取客户控制器来创建客户,获取客户详细信息并将这些详细信息插入我的发票视图


这些控制器/视图位于不同的区域

请记住,控制器服务于特定的请求获取客户、查看客户、创建发票

在您的情况下,不需要让客户控制器创建客户

例如,只需创建一个名为GetCustomer的常规方法。这可以从多个控制器调用。这个方法可以存在于任何地方——可能存在于模型名称空间中的helpers程序集中,假设您的模型位于单独的类库中,我就是这么做的。从你的发票管理员那里打电话就可以了

你不想在控制器之间来回移动——这违背了MVC的原则

应该是

URL请求->控制器->模型->控制器->视图

不是

URL请求->控制器->控制器->模型->控制器->视图

这就是我的意思

客户控制员:

发票控制员:

型号:


知道我的意思吗?关键是不要将GetCustomer逻辑放在控制器中—将其抽象到模型中—所有控制器都可以访问。

在回答您的技术问题之前,请考虑一下发票页面的流程。我想你需要一个搜索框来搜索客户。如果找不到客户,您要求自动重定向到其他控制器,创建客户,然后返回发票页面。您最好提醒用户找不到客户,并向他们提供创建客户的选项,他们可能拼错了名称等。否则,您最终会发现重复的客户,每个客户都附有不同的发票

然后,您可以使用以下通知重定向用户:我包含了一个返回url和客户名称,您的客户控制器可以接受这些参数并预填充名称字段以及重定向回:

RedirectToActionCreate,Customer,new{returnUrl=YourUrl,NewCustomerName=NewCustNameHere}


如果你真的想自动做到这一点,我会按照RPM建议的方法来做

我应该添加我的重定向,我假设您需要为客户输入其他信息,如地址等。因此,我只是预先填充我们已经知道的信息,并在重新提交客户表单后提供返回url。
public ActionResult Index(int customerId)
{
   var customer = Model.GetCustomerById(customerId);
   return View(customer);
}
public ActionResult GetInvoice(int customerId)
{
   var customer = Model.GetCustomerById(customerId);
   return View("Invoice", customer);
}
public Customer GetCustomerById(int customerId)
{
    var customer = yourDatabaseRepository.GetCustomerById(customerId);
}