2010-10-13 90 views
0

我正在構建一個電子商務應用程序,並且我有一個負責購買過程的控制器。MVC工作流問題

我在創建這些控制器中的方法時已經注意到,每個方法都負責處理來自前一視圖的輸入。

所以我有一個Quote方法返回一個Quote視圖,並且用戶正在與視圖進行交互,並且它的表單正在發佈到Payment方法。這意味着Payment方法實際上是在返回付款視圖之前處理來自報價頁面的信息。 「付款」視圖發佈到「完成」方法(在返回顯示購買完成的頁面之前正在處理付款信息)。

從webforms背景來看,每個方法實際上都是處理來自上一頁的信息,這似乎很奇怪。所以付款方式不是「控制」付款,而是在返回付款視圖之前實際「控制」報價頁面信息。

我以錯誤的方式看着這個嗎?

回答

1

它不是一個控制器方法處理先前的觀點,而是,你告訴你的觀點,以將信息傳遞給該控制器。它不需要將View的信息傳遞給另一個Controller方法。這取決於你如何編碼你的控制器視圖關係。

例如,您的控制器中有報價查看和報價方法。您可以在控制器中使用兩種報價方法,一種負責顯示信息,另一種負責處理從視圖傳遞的信息。

public ActionResult Quote() 
{ 
    return View(); 
} 

[httpPost] 
public ActionResult Quote(FormCollection quoteForm) 
{ 
    // process your Quote form 
    return RedirectToAction("Payment"); 
} 

對於我的報價查看

<% using(Html.BeginForm()) { %> 

    // my html form here 

    <input type="submit" text="submit" /> 
<% } %> 

我會這樣的代碼我的控制器,這樣我就不會混淆什麼控制器方法處理之我見。當我在報價單中提交表格時,它會將信息提交給接受httpPost的報價方法。雖然Tassadaque在這裏說的是適合你的情況。

+0

+1 OP應該查看Post/Redirect/Get模式。 – 2010-10-13 09:45:54

+0

感謝馬修.. – 2010-10-13 09:52:39

+0

是的,PRG模式看起來好像可以讓我更好地管理工作流程,同時避免重複提交的問題。感謝馬修。 – FloatLeft 2010-10-13 09:53:25