asp.net-core-mvc – 将复杂对象存储在MVC 6中的TempData中
通过使用TempData,我一直在尝试通过重定向将数据传递给一个操作:
if (!ModelState.IsValid) { TempData["ErrorMessages"] = ModelState; return RedirectToAction("Product","ProductDetails",new { code = model.ProductCode }); } 但不幸的是,它失败了以下消息: “System.InvalidOperationException 我在the MVC project in Github发现了一个问题,但是当它解释为什么我得到这个错误,我看不到什么会是一个可行的替代方案. 一个选项是将对象序列化为一个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类型.您可以使用上述的扩展方法将其添加到临时数据字典: TempData.Put(“key”,objectA); 并检索它可以这样做: var value = TempData.Get&ClassA>(“key”)其中检索的值将是ClassA类型 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core – VS 2015中的Asp.net核心EF
- 如果我应该开始使用asp.net mvc 4而不是asp.net MVC 3,我可
- 如何在ASP.NET中使用log4net在日志文件中包含SessionID?
- asp.net-mvc – 将Angular与MVC 5捆绑在一起后出现格式错误
- asp.net – 如何确定哪个按钮导致回发
- asp.net核心 – 是否可以自主托管没有IIS(不是Web API)的AS
- asp.net – 如何将Sitecore Droptree源设置为项目本身
- asp.net-mvc – ie9:调试时出现恼人的弹出:“错误:’__f
- asp.net – 如何将其他页面包含到aspx文件中
- asp.net-mvc – Mvc 3 Razor:使用部分部分视图?