C# 无法将复杂对象传递给其他操作方法

C# 无法将复杂对象传递给其他操作方法,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在尝试使用TempData将对象传递给另一个动作方法。控制器没有重定向到操作方法,而是给我一个带有URL中当前操作方法的白色屏幕。如果注释掉将对象传递给TempData的行,它将正确重定向。我的对象是否太复杂而无法通过?是否有其他方法将复杂对象传递给另一个动作方法 我将对象传递给TempData的位置: public async Task<IActionResult> UploadFile(IFormFile file) { if (file == null || fil

我正在尝试使用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 class FoundPattern
{
    public KpiPattern pattern = new KpiPattern();
    public List<FoundElement> elements = new List<FoundElement>();
}
public异步任务上传文件(ifformfile)
{
if(file==null | | file.Length==0)
返回内容(“未选择文件”);
其他的
{                
var path=path.Combine(
Directory.GetCurrentDirectory(),“wwwroot”,
“processs.json”);
使用(var stream=newfilestream(路径,FileMode.Create))
{
等待文件.CopyToAsync(流);
}
RetrieveModels rm=rm=新的RetrieveModels(路径);
List foundList=新列表();
列表进程=rm进程;
FindPatterns findp=新的FindPatterns(进程,pt.KpiPatterns);
foundList=findp.fp;
TempData[“list”]=foundList.ToList();
TempData[“Name”]=“多个业务流程”;
返回重定向到操作(“概述”);
}           
}
要重定向到的操作方法:

public IActionResult Overview()
{
    var list = TempData["list"] as List<FoundPattern>;
    ViewData["Name"] = TempData["Name"];
    return View(list);
}
public IActionResult Overview()
{
var list=TempData[“list”]作为列表;
ViewData[“名称”]=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 class FoundPattern
{
    public KpiPattern pattern = new KpiPattern();
    public List<FoundElement> elements = new List<FoundElement>();
}
公共类模式
{
公共KpiPattern模式=新KpiPattern();
公共列表元素=新列表();
}
对象中的对象列表:

public class FoundElement
{
    public List<string> ElementNames = new List<string>();
    public bool Present { get; set; }
}
公共类FoundElement
{
public List ElementNames=新列表();
公共bool Present{get;set;}
}
工作时的响应标题:

找到HTTP/1.1 302 位置:/Home/概述 服务员:红隼 设置Cookie:.AspNetCore.Mvc.CookieTempDataProvider=CfDJ8Mu_qdgu59Hncgqkem39lg_cUi_rzuyuxxaeyreufpl2ethrhpv_5gvkdlcicvfhqg1kozdbfbfhbbjzdpc8jyzq5kplhtfnw962pyxnhycnbx_mokwgfsgsg_dQ m7llsvxwyhjqqqqalsse26k4ilrfgn8b5b5b5magihwourgf;路径=/;samesite=严格;httponly X-SourceFiles:=?UTF-8?B?QzpcVXNlcnNcWkFUXHNvdXJjZVxyZXBvc1xLUEl0b29sXEtQSXRvb2xcSG9tZVxVcGxvYWRGaWxl= X-Powered-By:ASP.NET 日期:2018年2月7日星期三10:38:40 GMT 内容长度:0

HTTP/1.1200正常
传输编码:分块
内容类型:text/html;字符集=utf-8
服务员:红隼
设置Cookie:.AspNetCore.Mvc.CookieTempDataProvider=;expires=1970年1月1日星期四00:00:00 GMT;路径=/;samesite=严格
X-SourceFiles:=?UTF-8?B?QZPCVxNLCNNCWKFUXHNVDXJZVXYZBVC1XLUEL0B29SXETQSXRVB2XCSG9TZVxPDMVYDMLLDW==
X-Powered-By:ASP.NET
日期:2018年2月7日星期三10:38:40 GMT

不工作时的响应标题:

HTTP/1.1500内部服务器错误
服务员:红隼
X-SourceFiles:=?UTF-8?B?QzpcVXNlcnNcWkFUXHNvdXJjZVxyZXBvc1xLUEl0b29sXEtQSXRvb2xcSG9tZVxVcGxvYWRGaWxl=
X-Powered-By:ASP.NET
日期:2018年2月7日星期三10:41:28 GMT
内容长度:0

您正在使用
CookieTempDataProvider
来管理
TempData
。唉,顾名思义,它导致将
TempData
存储在中


问题是,您的数据要放在cookie中。您可能希望使用
ITempDataProvider
实现(例如
sessionstatempdataprovider
)。

TempData[“Name”]
有效吗?TempData实际上只是会话数据,那么会话一般可以工作吗?如果您担心将对象复杂地序列化为JSON,请将JSON存储在TempData中,并在需要时进行反序列化。@AshleyMedway感谢您的回答<代码>临时数据[“名称”]有效。我还使用TempData存储了一个简单的字符串列表,效果很好。但是现在它更复杂了,它不再工作了。我认为将其序列化为JSON是唯一的解决方案…@CalC TempData应该配置,因为
TempData[“Name”]
工作正常。只是为了检查一下,我确实添加了配置TempData提供程序的代码,但没有帮助。@mjwills是的。在退出操作方法之前,我甚至在locals窗口中看到了下面一行:我刚刚切换到了
SessionStateTempDataProvider
。谢谢你的解决方案。您知道这种类型的实现的最大大小是多少吗?我哪儿都找不到。