无法弄清楚: 有这个。(我删除了大部分代码以简化阅读)
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
Change();
return RedirectToAction("Index");
}
public ActionResult Index()
{
return View();
}
private async void Change()
{
await Task.Run(() =>
{
try
{
TempData["Text"] = "Text 1";
}
catch
{
TempData["Text"] = "Text 2";
}
});
查看 @TempData [ “文本”]
我需要改变它,但它不会改变。需要一些帮助或其他方法(我只需根据“更改”功能中的条件更改文本并将其显示给用户)。 谢谢!
答案 0 :(得分:0)
async void
表示该方法为fire-and-forget
。当您尝试设置TempData
时,控制器不会等待它完成,响应已经被发送回客户端。
假设您使用的是ASP.NET MVC 4或更高版本,则必须将Change
的签名更改为async Task
并使您的操作异步:
[HttpPost]
public async Task<ActionResult> UploadAsync(HttpPostedFileBase file)
{
await Change();
return RedirectToAction("Index");
}
private async Task Change()
{
await Task.Run(() =>
{
try
{
TempData["Text"] = "Text 1";
}
catch
{
TempData["Text"] = "Text 2";
}
});
}
实际上,如果它只是调用Task.Run,则没有理由在async/await
中使用Change
。你可以写:
private Task Change()
{
return Task.Run(() =>
{
try
{
TempData["Text"] = "Text 1";
}
catch
{
TempData["Text"] = "Text 2";
}
});
}
您可以找到有关使用异步方法here
的完整教程