寻找在控制器中序列化数据的替代方案

时间:2013-11-18 18:44:28

标签: asp.net-mvc-3 asp.net-mvc-4

我正在寻找一种方法来切换序列化数据(我最初使用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个左右的输入,这将变得混乱。

所以我的问题可能是双重的:

  1. 以这种方式使用序列化是否有一个干净的替代方案?
  2. 如果没有干净的替代方案,我不得不在每个方面都这样做 ActionResult,例如,如果我保留,我不知道该怎么做 它到一个输入视图和一个提交/确认视图,只是想 将两个值传递给“提交”步骤(上面未显示),例如 FirstName是一个电子邮件。我怎么能用TempData做到这一点?
  3. 感谢。

0 个答案:

没有答案