2016-04-22 66 views
0
public async Task<ActionResult> Print(BasicSurveyReportViewModel paramModel) 
{ 

    ActionResult OverallSummary = 
     await basicSurveyReportController.OverallSummary(paramModel); 
    ActionResult CompanyInfo = 
     await basicSurveyReportController.CompanyInfo(paramModel); 
    ViewBag.OverallSummary = OverallSummary; 
    ViewBag.CompanyInfo = CompanyInfo; 
    return View(); 
} 

在此代码中,首先成功设置了OverallSummary变量。在异步方法中等待覆盖以前的变量,多重等待

但是,当运行在CompanyInfo行的方法时,它将该变量放入CompanyInfoOverallSummary

如何将结果分解为单独的变量?

+1

您的问题缺乏清晰度。你是说'ViewBag.OverallSummary'和'ViewBag.CompanyInfo'都指向方法结尾的同一个对象吗? – yaakov

+0

覆盖最新的await结果的两个ActionResult变量的顶部。它也会影响'ViewBag.OverallSummary'和'ViewBag.CompanyInfo'。 – jemrlee

+1

这不是一句话。在'CompanyInfo'线的方法运行时,** **,但 你的意思是这条线: – yaakov

回答

1

看起来你正试图调用异步子动作,这在ASP.NET 4.x中不受支持。我怀疑ASP.NET控制器只是在您返回View(blah)或您的子操作中的任何内容时才访问当前的请求。

正确地做到这一点(在ASP.NET的当前版本)的唯一方法是写helper方法做实际的工作,回到自己的类型(不ActionResult):

OverallSummary GetOverallSummaryAsync(BasicSurveyReportViewModel model); 
CompanyInfo GetCompanyInfoAsync(BasicSurveyReportViewModel model); 

public async Task<ActionResult> Print(BasicSurveyReportViewModel paramModel) 
{ 
    OverallSummary overallSummary = 
    await GetOverallSummaryAsync(paramModel); 
    CompanyInfo companyInfo = 
    await GetCompanyInfoAsync(paramModel); 
    ViewBag.OverallSummary = overallSummary; 
    ViewBag.CompanyInfo = companyInfo; 
    return View(); 
} 

然后你其他控制器操作也可以转换为使用这些方法,如下所示:

public async Task<ActionResult> OverallSummary(BasicSurveyReportViewModel paramModel) 
{ 
    return View(await GetOverallSummaryAsync(paramModel)); 
}