WF4.0状态机如下图:

每一步点击Next跳到下一步,点击Back回到上一步。
实现:
第一步:新建一个ASP.NET MVC Application和一个Workflow的ActivityDesignerLibrary项目,在mvc项目的Model文件夹下添加一个User。代码如下:
public class User
{ //个人信息
[Required(ErrorMessage = "姓名不能为空")]
[StringLength(20, ErrorMessage = "姓名长度不能超过20个字符")]
public string Name { get; set; }
public int? Age { get; set; }
//职位信息
[Required(ErrorMessage = "职位不能为空")]
public string Post { get; set; }
public int? Salary { get; set; }
//学历信息
[Required(ErrorMessage = "毕业院校不能为空")]
public string University { get; set; }
public int? GraduationYear { get; set; }
//联系信息
[Required(ErrorMessage = "邮件不能为空")]
[RegularExpression(@"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|" + @"0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z]" + @"[a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$", ErrorMessage= "邮件格式不正确")]
public string Email { get; set; }
public int? Mobile { get; set; }
}
{ //个人信息
[Required(ErrorMessage = "姓名不能为空")]
[StringLength(20, ErrorMessage = "姓名长度不能超过20个字符")]
public string Name { get; set; }
public int? Age { get; set; }
//职位信息
[Required(ErrorMessage = "职位不能为空")]
public string Post { get; set; }
public int? Salary { get; set; }
//学历信息
[Required(ErrorMessage = "毕业院校不能为空")]
public string University { get; set; }
public int? GraduationYear { get; set; }
//联系信息
[Required(ErrorMessage = "邮件不能为空")]
[RegularExpression(@"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|" + @"0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z]" + @"[a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$", ErrorMessage= "邮件格式不正确")]
public string Email { get; set; }
public int? Mobile { get; set; }
}
第二步:在Controllers中添加一个控制类,代码如下:
public class UserController : Controller
{
//
// GET: /User/
#region Declarations
static WorkflowUtil wrkFlw = null;
string page="Step1";
public User userObj;
#endregion
#region Process action method
public ActionResult Process(string nextButton, string backButton)
{
if (wrkFlw == null )
{
wrkFlw = new WorkflowUtil();
}
if ((nextButton != null))
{
page = wrkFlw.RunWorkflow("Next");
return View(page, userObj);
}
else if (backButton != null)
{
ModelState.Clear();
page = wrkFlw.RunWorkflow("Prev");
return View(page, userObj);
}
else
return View(page, userObj);
}
#endregion
#region Events
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
userObj = (User)TempData["User"];
if (userObj == null) userObj = new User();
TryUpdateModel(userObj);
if (TempData["CurrentPage"] != null) page = TempData["CurrentPage"].ToString();
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
TempData["User"] = userObj;
TempData["CurrentPage"] = page;
}
#endregion
public ActionResult Index()
{
return View();
}
}
{
//
// GET: /User/
#region Declarations
static WorkflowUtil wrkFlw = null;
string page="Step1";
public User userObj;
#endregion
#region Process action method
public ActionResult Process(string nextButton, string backButton)
{
if (wrkFlw == null )
{
wrkFlw = new WorkflowUtil();
}
if ((nextButton != null))
{
page = wrkFlw.RunWorkflow("Next");
return View(page, userObj);
}
else if (backButton != null)
{
ModelState.Clear();
page = wrkFlw.RunWorkflow("Prev");
return View(page, userObj);
}
else
return View(page, userObj);
}
#endregion
#region Events
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
userObj = (User)TempData["User"];
if (userObj == null) userObj = new User();
TryUpdateModel(userObj);
if (TempData["CurrentPage"] != null) page = TempData["CurrentPage"].ToString();
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
TempData["User"] = userObj;
TempData["CurrentPage"] = page;
}
#endregion
public ActionResult Index()
{
return View();
}
}