为了账号安全,请及时绑定邮箱和手机立即绑定

如何在ASP.NET MVC中进行RedirectToAction而不丢失请求数据

如何在ASP.NET MVC中进行RedirectToAction而不丢失请求数据

小唯快跑啊 2019-12-10 10:22:55
使用ASP.NET MVC,在某些情况下(例如,表单提交)可能需要输入RedirectToAction。一种这样的情况是,您在提交表单后遇到验证错误,并且需要重定向回表单,但希望该URL反映表单的URL,而不是表单提交的操作页面。由于我需要表单包含原始POSTed数据,为了用户方便以及验证的目的,如何将数据通过RedirectToAction()?如果使用viewData参数,则我的POST参数将更改为GETparameter。
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

请记住,TempData在会话中存储表单集合。如果您不喜欢这种行为,则可以实现新的ITempDataProvider接口,并使用其他某种机制来存储临时数据。除非您知道一个事实(通过测量和分析),否则使用Session状态会伤害您,否则我不会这样做。


查看完整回答
反对 回复 2019-12-10
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

还有另一种避免使用tempdata的方法。我喜欢的模式涉及为无效表单的原始渲染和重新渲染创建1个动作。它是这样的:


var form = new FooForm();


if (request.UrlReferrer == request.Url)

{

     // Fill form with previous request's data

}


if (Request.IsPost())

{

     if (!form.IsValid)

     {

         ViewData["ValidationErrors"] = ...

     } else {

         // update model

         model.something = foo.something;

         // handoff to post update action

         return RedirectToAction("ModelUpdated", ... etc);

     }

}


// By default render 1 view until form is a valid post

ViewData["Form"] = form;

return View();

这或多或少是这种模式。有点假。使用此方法,您可以创建1个视图来处理呈现表单,重新显示值(因为表单将填充先前的值)并显示错误消息。


当发布到该动作时,如果有效,它将控制权转移到另一个动作。


当我们建立对MVC的支持时,我正在尝试在.net验证框架中简化此模式。


查看完整回答
反对 回复 2019-12-10
  • 3 回答
  • 0 关注
  • 1041 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信