ASP.NET Core保存后携带员工ID返回上一页问题求助
解决方案:ASP.NET Core保存后返回原页面
方案1:通过ReturnUrl传递原页面地址
- 跳转页2时,除
empId外额外带上原页面路由作为ReturnUrl参数,示例链接:https://localhost:7119/Admin/Pc/Edit?empId=1&ReturnUrl=/Admin/Employee(假设页1路由为/Admin/Employee) - 在页2的ViewModel中添加
ReturnUrl属性:public class PcEditViewModel { public int EmpId { get; set; } // 其他PC信息属性... public string ReturnUrl { get; set; } } - 页2视图中添加隐藏域提交
ReturnUrl:<input type="hidden" asp-for="ReturnUrl" /> - 保存动作的Controller方法中验证并跳转:
[HttpPost] public IActionResult Edit(PcEditViewModel model) { if (ModelState.IsValid) { // 执行PC信息保存逻辑 _pcRepository.Save(model); // 验证地址合法性,防止钓鱼跳转 if (!string.IsNullOrEmpty(model.ReturnUrl) && Url.IsLocalUrl(model.ReturnUrl)) { return Redirect(model.ReturnUrl); } // 默认跳转回员工页 return RedirectToAction("Index", "Employee"); } return View(model); }
方案2:用TempData存储返回地址(不暴露在URL)
- 页1跳转前,在Controller中存入返回地址:
public IActionResult NavigateToPcEdit(int empId) { // 可通过Request.Headers["Referer"]自动获取当前页地址 TempData["ReturnUrl"] = "/Admin/Employee"; return RedirectToAction("Edit", "Pc", new { empId }); } - 页2保存后取出地址跳转:
[HttpPost] public IActionResult Edit(PcEditViewModel model) { if (ModelState.IsValid) { _pcRepository.Save(model); var returnUrl = TempData["ReturnUrl"] as string; if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } return RedirectToAction("Index", "Employee"); } return View(model); }
方案3:固定跳转回员工页(无需动态地址)
如果保存后固定返回页1,直接指定路由跳转:
[HttpPost] public IActionResult Edit(PcEditViewModel model) { if (ModelState.IsValid) { _pcRepository.Save(model); // 直接跳转到员工列表页 return RedirectToAction("Index", "Employee"); } return View(model); }
常见报错排查
- 报错「无效跳转地址」:检查
ReturnUrl是否为本地地址(必须以/开头,不能是外部域名) TempData取值为空:确保项目已启用会话(ASP.NET Core默认启用,若手动禁用需重新配置)- 参数丢失:检查ViewModel是否包含对应属性,视图是否正确绑定参数
内容的提问来源于stack exchange,提问作者ATA
相关产品推荐
相关产品推荐

