ASP.NET MVC异步控制器Action如何正确返回View视图?
解决方案
你遇到的编译错误是异步Action的返回类型声明错误导致的,修正方法如下:
核心修正逻辑
同步Action返回ActionResult(或ViewResult等具体返回类型)时,对应的异步Action需要将返回值包装为Task<T>泛型类型,把原返回类型作为泛型参数传入即可。无返回值的Task对应同步方法的void类型,自然无法接收View()的返回结果。
把你的方法签名从
public async Task Updateuser()
修改为
public async Task<ActionResult> UpdateUser()
可选优化
- 修正方法名大小写,和你定义的
UpdateUser命名保持一致,符合C#命名规范 - 你计算得到的
hash变量如果需要传递到视图,可以直接作为参数传入View()方法:return View(hash);
修正后的完整代码
public async Task<ActionResult> UpdateUser() { ApplicationUser usr = await _userManager.FindByNameAsync(User.Identity.Name); string name = usr.UserName; string email = usr.Email; string UserEmail = name + email; string hash = ""; using (var sha = new System.Security.Cryptography.SHA256Managed()) { // Convert the string to a byte array first, to be processed byte[] textBytes = System.Text.Encoding.UTF8.GetBytes(UserEmail); byte[] hashBytes = sha.ComputeHash(textBytes); // Convert back to a string, removing the '-' that BitConverter adds hash = BitConverter .ToString(hashBytes) .Replace("-", String.Empty).ToLower(); } // 可按需将hash作为模型传入视图 return View(hash); }
补充说明
如果是ASP.NET Core MVC项目,也可以将返回类型替换为Task<IActionResult>,兼容性更强。只要Action方法内用到了await关键字,方法签名必须加async修饰,返回值用Task<T>包装原同步方法的返回类型即可,视图渲染逻辑和同步Action完全一致,不需要额外修改。
内容的提问来源于stack exchange,提问作者Grazosi
相关产品推荐
相关产品推荐

