ASP.NET Core 3.1中OnPostAsync能否返回复杂对象或绑定模型的页面
ASP.NET Core 3.1 的 OnPostAsync 方法完全可以实现和 OnGetAsync 完全一致的效果,既可以返回绑定复杂对象为视图模型的页面,也可以返回 PDF 这类特殊类型的结果。
一、返回绑定复杂对象的页面
实现逻辑和 OnGetAsync 没有任何区别,只需要给 PageModel 对应的复杂对象属性赋值后直接返回 Page() 即可,视图层代码完全无需修改。
示例代码如下:
// PageModel 代码 public ComplexObject CObject { get; set; } public async Task<IActionResult> OnPostAsync(string inputParam) { // 可按需添加模型校验逻辑,校验失败直接返回页面会自动携带错误信息 if (!ModelState.IsValid) { return Page(); } // 获取复杂对象的业务逻辑 var obj = await GetCObject(inputParam); CObject = obj; // 直接返回Page即可完成视图模型绑定,和OnGetAsync逻辑完全一致 return Page(); }
视图代码和你给出的 OnGetAsync 示例完全相同:
@model ComplexObject @* 展示复杂对象的逻辑 *@
二、返回PDF等特殊类型结果
OnPostAsync 支持所有 IActionResult 类型的返回值,返回PDF这类文件结果的示例如下:
public async Task<IActionResult> OnPostAsync(string inputParam) { // 调用自定义方法生成PDF字节流 byte[] pdfFileBytes = await GeneratePdfByComplexObject(inputParam); // 返回文件结果,指定MIME类型和文件名 return File(pdfFileBytes, "application/pdf", "导出数据.pdf"); }
如果是前端异步发起的Post请求,你也可以直接返回Json格式的复杂对象:
public async Task<IActionResult> OnPostAsync(string inputParam) { var complexData = await GetCObject(inputParam); return new JsonResult(complexData); }
注意事项
- 若Post请求携带表单提交数据,返回
Page()时会自动保留ModelState中的校验错误信息,前端可通过标签助手直接展示错误提示 - 若Post处理完成后需要跳转到其他页面,使用
RedirectToPage方法即可,和OnGetAsync的跳转逻辑一致
内容的提问来源于stack exchange,提问作者SoftwareDveloper
相关产品推荐
相关产品推荐

