0

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

我有一个控制器,它提供一个视图来创建所有工作正常的客户

我有另一个控制器,用于创建发票。但是要创建发票,我需要搜索一切正常的客户。如果我找不到客户,我将需要为创建客户视图提供服务,创建客户,然后返回到我的发票创建。

所以我的问题是如何从我的发票控制器让客户控制器创建客户,取回客户详细信息并将详细信息插入我的发票视图。

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

4

2 回答 2

0

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

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

RedirectToAction("Create", "Customer", new { returnUrl = "YourUrl", NewCustomerName = "NewCustNameHere" }

如果您确实想自动执行此操作,我会按照 RPM 建议的方法执行此操作。

于 2010-07-12T16:19:59.323 回答
0

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

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

例如,只需创建一个名为“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”逻辑放在控制器中 - 将其抽象到模型中 - 所有控制器都可以访问。

于 2010-07-12T05:09:56.187 回答