猿问

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

使用ASP.NET MVC,在某些情况下(例如,表单提交)可能需要输入RedirectToAction

一种这样的情况是,您在提交表单后遇到验证错误,并且需要重定向回表单,但希望该URL反映表单的URL,而不是表单提交的操作页面。

由于我需要表单包含原始POSTed数据,为了用户方便以及验证的目的,如何将数据通过RedirectToAction()?如果使用viewData参数,则我的POST参数将更改为GETparameter。


小唯快跑啊
浏览 1071回答 3
3回答

慕盖茨4494581

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

汪汪一只猫

还有另一种避免使用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 postViewData["Form"] = form;return View();这或多或少是这种模式。有点假。使用此方法,您可以创建1个视图来处理呈现表单,重新显示值(因为表单将填充先前的值)并显示错误消息。当发布到该动作时,如果有效,它将控制权转移到另一个动作。当我们建立对MVC的支持时,我正在尝试在.net验证框架中简化此模式。
随时随地看视频慕课网APP
我要回答