【发布时间】:2018-02-07 10:10:18
【问题描述】:
我正在尝试使用 TempData 将对象传递给另一个操作方法。控制器没有重定向到操作方法,而是在 URL 中给我一个带有当前操作方法的白屏。如果我注释掉将对象传递给 TempData 的行,它会正确重定向。我的对象是否太复杂而无法通过?是否有将复杂对象传递给另一个操作方法的替代方法?
我将对象传递给 TempData:
public async Task<IActionResult> UploadFile(IFormFile file)
{
if (file == null || file.Length == 0)
return Content("file not selected");
else
{
var path = Path.Combine(
Directory.GetCurrentDirectory(), "wwwroot",
"processes.json");
using (var stream = new FileStream(path, FileMode.Create))
{
await file.CopyToAsync(stream);
}
RetrieveModels rm = rm = new RetrieveModels(path);
List<FoundPattern> foundList = new List<FoundPattern>();
List<ProcessModel> processes = rm.Processes;
FindPatterns findp = new FindPatterns(processes, pt.KpiPatterns);
foundList = findp.fp;
TempData["list"] = foundList.ToList();
TempData["Name"] = "Multiple Business Processes";
return RedirectToAction("Overview");
}
}
我想重定向到的操作方法:
public IActionResult Overview()
{
var list = TempData["list"] as List<FoundPattern>;
ViewData["Name"] = TempData["Name"];
return View(list);
}
我试图传递给 TempData 的对象列表:
public class FoundPattern
{
public KpiPattern pattern = new KpiPattern();
public List<FoundElement> elements = new List<FoundElement>();
}
对象内的对象列表:
public class FoundElement
{
public List<string> ElementNames = new List<string>();
public bool Present { get; set; }
}
有效时的响应标头:
HTTP/1.1 302 Found
Location: /Home/Overview
Server: Kestrel
Set-Cookie: .AspNetCore.Mvc.CookieTempDataProvider=CfDJ8Mu_qDgU_59HncGqqkEm39LG_cUi_rzUyuXXaEYreUFPL2etHRuHPv_5GVKDLcIIcvFhQg1KOzDBfhbvDbjZDpcp8JYzq5kpLHtfnw962pyXNHyCNbx_MOkKwGFSG_dQ_M7LlSVxWYHjqalsSe26K4IlRfGN8V9B5MAgIhWoURgF; path=/; samesite=strict; httponly
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcWkFUXHNvdXJjZVxyZXBvc1xLUEl0b29sXEtQSXRvb2xcSG9tZVxVcGxvYWRGaWxl?=
X-Powered-By: ASP.NET
Date: Wed, 07 Feb 2018 10:38:40 GMT
Content-Length: 0
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Server: Kestrel
Set-Cookie: .AspNetCore.Mvc.CookieTempDataProvider=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; samesite=strict
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcWkFUXHNvdXJjZVxyZXBvc1xLUEl0b29sXEtQSXRvb2xcSG9tZVxPdmVydmlldw==?=
X-Powered-By: ASP.NET
Date: Wed, 07 Feb 2018 10:38:40 GMT
当它不起作用时的响应标头:
HTTP/1.1 500 Internal Server Error
Server: Kestrel
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcWkFUXHNvdXJjZVxyZXBvc1xLUEl0b29sXEtQSXRvb2xcSG9tZVxVcGxvYWRGaWxl?=
X-Powered-By: ASP.NET
Date: Wed, 07 Feb 2018 10:41:28 GMT
Content-Length: 0
【问题讨论】:
-
TempData["Name"]有效吗? TempData 实际上只是会话数据,那么会话通常可以工作吗?如果您担心对象会将其复杂序列化为 JSON,请将 JSON 存储在 TempData 中并在需要时反序列化。 -
@AshleyMedway 感谢您的回复。
TempData["Name"]有效。我还使用 TempData 来存储一个简单的字符串列表,它工作得很好。但是现在它更复杂了,它不再起作用了。我想将它序列化为 JSON 是唯一的解决方案...... -
@CalC TempData 应该配置,因为
TempData["Name"]工作正常。只是为了检查一下,我确实添加了配置 TempData 提供程序的代码,但它没有帮助。 -
@mjwills 是的。我什至在退出操作方法之前在本地窗口中得到以下行:imgur.com/a/nE0WJ
标签: c# asp.net asp.net-mvc