0

ASP.NETMVC4ウィザードがあります。1つの大きなビューモデルをステップからステップに渡すために、先物アセンブリを使用します。モデルを次のようにシリアル化します

@Html.Serialize("model", Model, SerializationMode.Signed); 

コントローラーで逆シリアル化します

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var serialized = Request.Form["model"];
    if (serialized != null)
    {
        model = (BausparViewModel)new MvcSerializer().Deserialize(serialized, SerializationMode.Signed);
        TryUpdateModel(model);
    }

...
}

TempDataを

protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
    if (filterContext.Result is RedirectToRouteResult)
        TempData["model"] = model;
}

すべてのウィザードステップには独自のビューがあり、RedirectToAction( "ActionName")を使用してコントローラーの前/次のアクションを管理します

ブラウザがF5またはメニューを使用して更新されない限り、すべてが正常に機能します。この時点で、コントローラーが再度呼び出されます。TempDataは再度保存されませんが、コントローラーにはすでにモデルがあります。

ただし、2つの列挙型プロパティがありません。これらは前の手順で使用されます。彼らはRadiobuttonForを介してビューにバインドされました。

では、なぜ不完全なモデルがあるのでしょうか。

よろしくお願いしますcsteinmueller

4

1 に答える 1

0

1 回のリクエストより長く存続する必要があるものについては、 を使用しないでくださいTempDataSessionまたはその他の長期保管メカニズムを使用します。

TempDataディクショナリから読み取られた後に値を削除するように設計されています。やのTempDataDictionaryようなメソッドがあるのはそのためです。これらのメソッドを使用すると、ディクショナリに明示的に「ねえ、読んだ後にこの値を削除しないでください」と伝えることができます。デフォルトでは、読んだ後に値を削除するからです。PeekKeep

于 2013-01-08T15:53:16.317 に答える