我遇到了問題,如何正確設計我的控制器的流程巫婆會做一些高級的事情。我必須在我的網站上添加多個步驟。它看起來像這樣:控制器中的高級流程,如何創建可重複使用的控制器方法
public class CoursesController : Controller {
[HttpGet]
public ActionResult Create() //1 step - User fill some basic infos and send back forms to Save method
{
return View(model.GetNewInstanceOfCourse());
}
[HttpPost]
public ActionResult Save(NewCourse newCourse) //2 step - Datas are stored in session
{
string Token = Guid.NewGuid().ToString("D");
Session.Add(Token, newCourse);
return RedirectToAction("Subjects", new { Token = Token });
}
[HttpGet]
public ActionResult Subjects(string Token) //2 step - Users fill which Subjects will be on the course, then send forms to Confirm method
{
return View(model.GetAvaliableSubjects(Token/*to place Token in View and let retrieve object from session*/);
}
[HttpPost]
public ActionResult Confirm(Subjects subjects) //3 step - Users filled all required datas and now i want to store complete datas in database
{
//(assume that Session[...] return Dictionaty<string, ... > instead of object
if(!Session["stored-courses-from-first-step"].ContainsKey(subjects.RetrievedFromViewToken)
{
return RedirectToAction("Create");
}
model.AddNewCourse(Session["stored-courses-from-first-step"][subjects.RetrievedFromViewToken], subjects);
return RedirectToAction("Index");
}
}
和它的作品完美...但我必須寫現有的課程,以便重新使用第2步在我的控制器的另一部分增加新的課題。我必須填寫一些不同的數據,然後重新使用爲該數據添加主題,然後重新使用函數Confirm,而不是插入一些數據,我想只更新並插入用戶完成的一些數據。
...
public AddNewSubject(int CourseId)
{
...
}
在預覽過程中,我有按鈕「添加新的課題」,這應該帶我去AddNewSubject方法,我不知道下一步該怎麼做。我不能用這種方法做這樣的事情:
return RedirectToAction("Save", "Courses", new { newCourse = model.GetExistingCourseAnChangeItToNewCourseInstance(CourseId)})
我不想爲此編寫專門的方法,因爲複製這些代碼的大部分。我認爲可以在我的控制器中重新組織流程,但我不知道如何做到這一點。其他問題是我需要重用方法確認,一次它會插入一些數據,其他時間它會更新一些數據。也許你會爲我提供一些很好的提示。
它可能是非常有用的檢查出這個答案以前的SO問題,它提供了一種替代方法來實現這一點:http://stackoverflow.com/questions/6402628/multi-step-registration-process-issues-in -Asp淨MVC-分裂-的ViewModels星/ 6403485#6403485 –