我是 asp.net MVC 的新手,必须决定如何实现以下内容。谁能指出我正确的方向
我有一个控制器,它提供一个视图来创建所有工作正常的客户
我有另一个控制器,用于创建发票。但是要创建发票,我需要搜索一切正常的客户。如果我找不到客户,我将需要为创建客户视图提供服务,创建客户,然后返回到我的发票创建。
所以我的问题是如何从我的发票控制器让客户控制器创建客户,取回客户详细信息并将详细信息插入我的发票视图。
这些控制器/视图位于不同的区域
我是 asp.net MVC 的新手,必须决定如何实现以下内容。谁能指出我正确的方向
我有一个控制器,它提供一个视图来创建所有工作正常的客户
我有另一个控制器,用于创建发票。但是要创建发票,我需要搜索一切正常的客户。如果我找不到客户,我将需要为创建客户视图提供服务,创建客户,然后返回到我的发票创建。
所以我的问题是如何从我的发票控制器让客户控制器创建客户,取回客户详细信息并将详细信息插入我的发票视图。
这些控制器/视图位于不同的区域
在我回答您的技术问题之前,请考虑一下发票页面的流程。我想您想要为客户提供某种搜索框。如果未找到客户,您要求自动重定向到不同的控制器,创建客户,然后返回发票页面。您最好提醒用户未找到客户,并为他们提供创建客户的选项(他们可能拼错了名称等)。否则,您最终会出现重复的客户,每个客户都附有不同的发票。
然后,您可以使用以下内容重定向用户(注意我包含了返回 url 和客户名称),您的客户控制器可以接受这些参数并预填充名称字段以及重定向回:
RedirectToAction("Create", "Customer", new { returnUrl = "YourUrl", NewCustomerName = "NewCustNameHere" }
如果您确实想自动执行此操作,我会按照 RPM 建议的方法执行此操作。
请记住,控制器服务于特定请求(获取客户、查看客户、创建发票)。
在您的情况下,您不需要“让客户控制器创建客户”。
例如,只需创建一个名为“GetCustomer”的常规方法。这可以从多个控制器调用。这个方法可以存在于任何地方——也许在你的模型命名空间中的一个助手程序集中(假设你的模型在一个单独的类库中,这就是我所做的)。只需从您的发票控制器调用它。
你不想在控制器之间来回移动——这违背了 MVC 的原则。
它应该是
URL Request -> Controller -> Model -> Controller -> View
.
不是
URL Request -> Controller -> Controller -> Model -> Controller -> View.
这就是我的意思。
客户控制器:
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);
}
明白我的意思了吗?关键是不要将“GetCustomer”逻辑放在控制器中 - 将其抽象到模型中 - 所有控制器都可以访问。