You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:03:34