我正在寻找一种方法来切换序列化数据(我最初使用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中使用TempData,如果我在每个视图中有10个左右的输入,这将变得混乱。
所以我的问题可能是双重的:
感谢。