結合 ASP.NET MVC 2 與 WF4 狀態機,實作四步驟使用者註冊 (個人資訊 → 職位資訊 → 學歷資訊 → 聯絡資訊),支援 Next/Back 導航。
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(@"...", ErrorMessage="郵件格式不正確")]
public string Email { get; set; }
public int? Mobile { get; set; }
}
public class UserController : Controller
{
static WorkflowUtil wrkFlw = null;
string page = "Step1";
public User userObj;
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);
}
return View(page, userObj);
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
userObj = (User)TempData["User"] ?? new User();
TryUpdateModel(userObj);
if (TempData["CurrentPage"] != null) page = TempData["CurrentPage"].ToString();
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
TempData["User"] = userObj;
TempData["CurrentPage"] = page;
}
}
原始碼:mvc.rar