RedirectToAction()丢失请求数据

时间:2014-02-06 11:46:26

标签: c# asp.net-mvc-4

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

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

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

1 个答案:

答案 0 :(得分: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");
}

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