我是新來的asp.net MVC,必須決定如何實現以下功能。任何人都可以請點我在正確的方向我怎麼能去另一個視圖來創建實體
我有一個控制器,供應以創造顧客,所有工作正常
我還有一個控制器,它服務於VEW創建發票。但要創建發票,我需要搜索所有工作正常的客戶。如果我無法找到客戶,我需要爲創建客戶視圖提供服務,創建客戶並返回到我的發票創建。
所以我的問題是如何從我的發票控制器我可以讓客戶控制器創建一個客戶,獲取客戶的詳細信息,並將細節插入我的發票視圖。
這些控制器/視圖生活在不同地區的
我是新來的asp.net MVC,必須決定如何實現以下功能。任何人都可以請點我在正確的方向我怎麼能去另一個視圖來創建實體
我有一個控制器,供應以創造顧客,所有工作正常
我還有一個控制器,它服務於VEW創建發票。但要創建發票,我需要搜索所有工作正常的客戶。如果我無法找到客戶,我需要爲創建客戶視圖提供服務,創建客戶並返回到我的發票創建。
所以我的問題是如何從我的發票控制器我可以讓客戶控制器創建一個客戶,獲取客戶的詳細信息,並將細節插入我的發票視圖。
這些控制器/視圖生活在不同地區的
請記住,控制器服務於特定請求(獲取一個客戶,查看客戶,創建發票)。
在您的情況下,您不需要「讓客戶控制器創建客戶」。
只需創建一個名爲「GetCustomer」的常規方法。這可以從多個控制器調用。這種方法可以在任何地方生活 - 也許在你的模型命名空間的助手程序集中(假設你的模型在一個單獨的類庫中,這正是我所做的)。只需從您的Invoice控制器調用它即可。
你不想從控制器來回移動 - 這違背了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);
}
知道WH我的意思是?關鍵是不要將「GetCustomer」邏輯放入控制器 - 將其抽象到模型中 - 可供所有控制器訪問。
在我回答您的技術問題之前,請考慮發票頁面的流程。我想你想爲顧客提供一些搜索框。如果未找到客戶,您要求自動重定向到其他控制器,創建客戶並返回發票頁面。您可能會更好地提醒用戶未找到客戶,並向他們提供創建客戶的選項(他們可能拼錯了名稱等)。否則,您將最終得到重複的客戶,每個客戶都附帶不同的發票。
然後,您可以用下面的(請注意,我包括了返回URL &客戶名稱)將用戶重定向,您的客戶控制器可以接受這些參數和預填充名稱字段以及重定向回:
RedirectToAction("Create", "Customer", new { returnUrl = "YourUrl", NewCustomerName = "NewCustNameHere" }
如果您確實想自動執行此操作,我會在RPM建議的方法中執行此操作。
我應該添加我的重定向,我假設你需要爲客戶輸入其他信息,如地址等。所以我只是預先填充我們已知的信息,並提供一個返回的網址,一旦客戶的形式是再次提交。 – matto0 2010-07-12 16:23:57
感謝您的回答。它解決了我的問題 – Amitesh 2010-07-13 03:35:34
嘿Amitesh,你能把它標記爲回答... thx! – matto0 2010-07-13 22:43:40