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