2010-10-13 84 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