RedirectToAction() 丢失请求数据

Posted

技术标签:

【中文标题】RedirectToAction() 丢失请求数据【英文标题】:RedirectToAction() loss request data 【发布时间】:2014-03-03 08:20:48 【问题描述】:

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

如果我使用 viewData 参数,我的 POST 参数将更改为 GET 参数。

如何避免? 我希望该选项未更改为 GET 参数。

【问题讨论】:

【参考方案1】:

正确的设计模式是在验证错误的情况下不重定向,而是再次呈现相同的表单。仅当操作成功时才​​应重定向。

例子:

[HttpPost]
public ActionResult Index(MyViewModel model)

    if (!ModelState.IsValid)
    
        // some validation error occurred => redisplay the same form so that the user
        // can fix his errors
        return View(model);
    

    // at this stage we know that the model is valid => let's attempt to process it
    string errorMessage;
    if (!DoSomethingWithTheModel(out errorMessage))
    
        // some business transaction failed => redisplay the same view informing
        // the user that something went wrong with the processing of his request
        ModelState.AddModelError("", errorMessage);
        return View(model);
    

    // Success => redirect
    return RedirectToAction("Success");

此模式允许您保留所有模型值,以防发生某些错误并且您需要重新显示相同的视图。

【讨论】:

谢谢!刚发现这个题目有类似问题***.com/questions/1936/…

以上是关于RedirectToAction() 丢失请求数据的主要内容,如果未能解决你的问题,请参考以下文章

回发后的 MVC3 RedirectToAction

ASP.NET RedirectToAction 更改请求中的 DateTime 格式

RedirectToAction 不适用于 Tempdata - ASP.net 核心 MVC

MVC - 使用 RedirectToAction() 传递数据

asp.net mvc 2 - 当 RedirectToAction 使用 JSON 数据时失去授权

MVC RedirectToAction 在 global.asax 中调用 Session_Start()