複合オブジェクトをTempDataに格納する
質問
TempDataを使用してリダイレクト後のアクションにデータを渡そうとしたところ、以下のようになりました。
if (!ModelState.IsValid)
{
TempData["ErrorMessages"] = ModelState;
return RedirectToAction("Product", "ProductDetails", new { code = model.ProductCode });
}
を実行しましたが、残念ながら以下のようなメッセージが出て失敗しています。
'
System.InvalidOperationException
はMicrosoft.AspNet.Mvc.SessionStateTempDataProvider'
をシリアライズすることはできません。 オブジェクトをシリアライズすることはできません。'ModelStateDictionary'
をセッション状態にシリアライズすることはできません'。
での問題を発見しました。 にあるMVCプロジェクト で問題を発見しましたが、このエラーが発生する理由は説明されているものの、実行可能な代替案が見当たりません。
1 つの選択肢は、オブジェクトを json 文字列にシリアライズして、それをデシリアライズして、その後に
ModelState
. これは最良の方法でしょうか?私が考慮する必要がある潜在的なパフォーマンスの問題はありますか?
最後に、複雑なオブジェクトをシリアライズする方法、あるいは
TempData
?
どのように解決するのですか?
このように、拡張メソッドを作成することができます。
public static class TempDataExtensions
{
public static void Put<T>(this ITempDataDictionary tempData, string key, T value) where T : class
{
tempData[key] = JsonConvert.SerializeObject(value);
}
public static T Get<T>(this ITempDataDictionary tempData, string key) where T : class
{
object o;
tempData.TryGetValue(key, out o);
return o == null ? null : JsonConvert.DeserializeObject<T>((string)o);
}
}
と、以下のように使うことができます。
例えば
objectA
は
ClassA
. これを上記の拡張メソッドを使ってtempデータ辞書に追加すると、次のようになります。
TempData.Put("key", objectA);
そして、それを取り出すには次のようにします。
var value = TempData.Get<ClassA>("key")
ここで
value
の型が取得されます。
ClassA
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である