MVC 4とMVC Futures [Serializable]
機能を使用して、複数ステップのウィザードでデータを保持しています。ウィザード自体は、ユーザーから情報を収集し、その入力に基づいて自動応答を生成するだけです。入力をDBに永続的に保存する必要はありません。ページを更新すると入力がリセットされます - これを避けることは可能でしょうか?
ここで、私はウィザードの確認ページで処理できる問題に遭遇しましたが、その必要性を取り除くことができるかどうかは疑問です。私の問題は、ユーザーが特定のステップですべての入力を「リフレッシュ/ F5」していることを知っていれば、すべての前のステップが消去されるということです。彼らが確認の前に最後のステップにいる場合、彼らは彼らが前のステップで入力したすべてをクリアしたことを認識しません。これを処理する方法は確認ページに検証サマリを入れることで、すべての入力をやり直す必要があることを示します。これは、ユーザーエクスペリエンスを破壊するため(すべての手順をやり直して再入力する必要があるため)、問題が発生します。ここで
は私のコントローラのコードのサンプルです:
//This is the serialization:
private MyData myData;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var serialized = Request.Form["myData"];
if (serialized != null) //Form was posted containing serialized data
{
myData = (MyData)new MvcSerializer().Deserialize(serialized, SerializationMode.Signed);
TryUpdateModel(myData);
}
else
myData = (MyData)TempData["myData"] ?? new MyData();
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
TempData["myData"] = myData;
}
...
//This shows a mid-step in the wizard - only as an example:
public ActionResult Step2(string backButton, string nextButton)
{
if (backButton != null)
return RedirectToAction("Step1");
else if ((nextButton != null) && ModelState.IsValid)
return RedirectToAction("Step3");
else
return View("Step2", myData);
私はページを更新含め、[Serializable]
、TempData
、Session
、OutputCache
などに関連する様々なものに今朝、昨日ほとんどを研究してきたとデータは永続していますが、ポイント上に何も見つかりません。
return
コールでは、特定のものすべての後に発生する唯一のことがありました。ActionResult
。それが正しいのかどうかは分かりませんが、ページがリフレッシュされると、モデルが最後までヒットしていないため、この状況で入力されたすべてのデータが消えてしまいます。しかし、それが問題なら、私はすでに持っているコードを壊すことなくそれを解決する方法を見つけることができません。
どのようなガイダンスもありがとうございます。
P.S. MVC 4用のタグはありませんので、MVC 3を選択しました。
これはうまくいきました。不思議なことに、OnResultExecutedに入れてみましたが、うまくいきました。あなたの最後の質問への短い答え:私はプログラマーではありません。長い答え:私はステップだけを必要とします。最終的な結果は、ユーザーの選択に基づいたユーザーの自動応答(何かの計算された合計か、状況の一般的評価かにかかわらず)です。私は他のシナリオでデータを保持することを望んでいますが、これだけではありません。 – REMESQ