c# - tutorial - webform教程




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

如果要将数据传递给重定向的操作,可以使用的方法是:

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);

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

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

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


看一下MVCContrib ,您可以执行以下操作:

using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}

请记住,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 post
ViewData["Form"] = form;
return View();

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

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

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







asp.net-mvc