ASP.NET Core 8 MVC授权后返回Create页面并保留表单数据
解决ASP.NET Core 8 MVC未登录用户提交表单后登录返回时保留表单数据的问题
问题背景
ASP.NET Core 8 MVC项目,采用Identity管理用户。Create页面允许所有用户访问操作,但未登录用户无法保存数据。当前未登录用户点击保存会跳转到登录页,登录后返回Create页面时表单字段为空,数据未保存,需要实现登录返回后表单保持填充状态。
尝试的临时方案
通过Session存储表单数据来实现预填充,代码如下:
Create方法(Get请求)
public IActionResult Create() { // 检查是否存在val的Session数据,存在则创建预填充的Obj对象 if (!HttpContext.Session.GetString(SessionKeyObjVal).IsNullOrEmpty()) { Obj prepopulatedObj = new Obj() { val = HttpContext.Session.GetString(SessionKeyObjVal) }; // 使用后清空对应Session数据 HttpContext.Session.SetString(SessionKeyDescription, ""); // 返回带有预填充数据的视图 return View(prepopulatedObj); } return View(); }
Create方法(Post请求)
[HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Create(Obj obj) { // 未认证用户将表单数据存入Session,再跳转到登录页 if (!HttpContext.User.Identity.IsAuthenticated) { HttpContext.Session.SetString("val", obj.val); return RedirectToPage("/Account/Login", new { area = "Identity" }); } // 后续数据保存逻辑... }
该方案能实现表单数据保留,但因Post方法未添加[Authorize]特性,用户登录后会被重定向至首页,不符合预期。
最终解决方法
修改Post方法中的重定向代码,明确指定ReturnUrl参数,确保登录后返回Create页面:
return Redirect("/Identity/Account/Login?ReturnUrl=%2FTabs%2FCreate");
其中%2FTabs%2FCreate是/Tabs/Create的URL编码形式,这样登录成功后会正确跳转回Create页面,同时Session中存储的表单数据会在Get方法中被读取并填充到表单中。
内容的提问来源于stack exchange,提问作者Jye
相关产品推荐
相关产品推荐

