我要寻找一个方法来从数据序列化(我原来使用这并MVC Futures程序),并通过它在我的控制器操作的东西,不使用连载切换。 我以前的实施是为直到它被提交,数据被保存的数据传递从行动对行动的向导。 但是,我无法在新项目中使用序列化和正在寻找一种替代。
下面是我在我的控制器做了一个例子:
private MyViewModel myViewModel;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var serialized = Request.Form["myViewModel"];
if (serialized != null) //Form was posted containing serialized data
{
myViewModel = (MyViewModel)new MvcSerializer()
.Deserialize(serialized, SerializationMode.Signed);
TryUpdateModel(myViewModel);
}
else
myViewModel= (MyViewModel)TempData["myViewModel"] ?? new MyViewModel();
TempData.Keep();
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
TempData["myViewModel"] = myViewModel;
}
然后,在一些行动:
// STEP 1:
public ActionResult Step1()
{
return View(myViewModel);
}
[HttpPost]
[ActionName("Step1")]
public ActionResult Step1POST(string nextButton)
{
if ((nextButton != null) && ModelState.IsValid)
return RedirectToAction("Step2");
return View(myViewModel);
}
// STEP 2:
[Themed]
public ActionResult Step2()
{
return View(myViewModel);
}
[HttpPost]
[ActionName("Step2")]
public ActionResult Step2POST(string backButton, string nextButton)
{
if (backButton != null)
return RedirectToAction("Step1");
else if ((nextButton != null) && ModelState.IsValid)
return RedirectToAction("Step3");
return View(myViewModel);
}
我的观点将包含这个@ Html.BeginForm块内:
@Html.Hidden("myViewModel",
new MvcSerializer().Serialize(Model, SerializationMode.Signed))
我首先想到的是,我没有其他选择(除了也许jQuery的,这也是我现在不能使用其他)。 在这种情况下我必须弄清楚如何在每一个的ActionResult,这将变得一团糟,如果我在每个视图10个左右投入使用TempData的。
所以我的问题很可能是两个方面:
- 是否有一个清洁的替代,以这种方式使用序列化?
- 如果没有清洁的替代,我不得不这样做在每个ActionResult的,我不知道怎么做,如果,例如,我把它保持在一个输入视图和一个提交/确认视图,只是想传递两个值到“提交”步骤(上面未示出),诸如姓的电子邮件。 我会如何做,使用的TempData?
谢谢。