ASP.NET MVC中的工作流程

时间:2009-12-18 09:08:29

标签: c# asp.net-mvc workflow

作为一项学习练习,我想将现有的Flash应用程序迁移到ASP.NET MVC。它有大约20种形式,虽然它主要是线性的,但根据用户决策或返回的数据,存在一定程度的备用流程。

有人能指出控制器如何处理这个问题的正确方向吗?我不希望我的观点必须弄清楚他们下一步的去向。

更新

我想我可能不了解建立这个的正确方法。我看到每个控制器都在处理应用程序的不同部分,并且主控制器负责工作流程。

如果这不是我应该采取的方法,那么最好的方法是什么?

更新2

ASP.NET MVC 2中的区域是否会处理应用程序的这一部分?我真的不喜欢在一个控制器中有太多动作的想法......

3 个答案:

答案 0 :(得分:3)

一般情况下:

控制器通常是处理应用程序逻辑上一致的块的动作集合(因此你经常看到UserController / OrderController等等)。

MVC应用程序应该使用PRG(post-redirect-get)构建,这意味着每个表单将有2个动作,一个将显示表单,第二个具有相同的名称但用[AcceptPost]装饰,将处理表单并根据结果将用户重定向到适当的位置。

了解其工作原理和迁移应用程序的最简单方法是将每个表单建模为一个没有逻辑的简单dto,为每个表单和2个操作构建一个视图。

在控制器中运行逻辑后,您可能希望将其迁移到可以注入控制器的某种形式的服务中。

专门针对您的工作流程:

每个工作流程都应该拥有自己的控制器。使用某种形式的状态模式(取决于工作流的复杂性)对它们进行建模可能很有用,并提供控制器可以转换为重定向到工作流中下一步的每个状态转换的结果。

答案 1 :(得分:1)

当表单发布到控制器操作时,控制器操作决定如何处理发布的结果以及下一个或重定向呈现的视图:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult HandleFormSubmission(FormCollection col)
{
    // do something with posted data
    // redirect to /someOtherController/someOtherAction
    // which could show some other form
    return RedirectToAction("someOtherAction", "someOtherController");
}

答案 2 :(得分:1)

我正在努力解决同样的问题(使用Windows Workflow Foundation和ASP.NET MVC),我在博客上发表了here

也许你会发现它有用,抱歉推送我自己的链接