route - url mvc c#




Como RedirectToAction no asp.net MVC sem perder dados da solicitação (4)

Usando o ASP.NET MVC, existem situações (como envio de formulário) que podem exigir um RedirectToAction .

Uma dessas situações é quando você encontra erros de validação após o envio de um formulário e precisa redirecionar de volta para o formulário, mas deseja que o URL reflita o URL do formulário, não a página de ação que ele envia.

Como eu exijo que o formulário contenha os dados originalmente do POST , para conveniência do usuário e para fins de validação, como posso passar os dados pelo RedirectToAction() ? Se eu usar o parâmetro viewData, meus parâmetros POST serão alterados para parâmetros GET .


A solução é usar a propriedade TempData para armazenar os componentes de solicitação desejados.

Por exemplo:

public ActionResult Send()
{
    TempData["form"] = Request.Form;
    return this.RedirectToAction(a => a.Form());
}

Em sua ação "Formulário", você pode:

public ActionResult Form()
{
    /* Declare viewData etc. */

    if (TempData["form"] != null)
    {
        /* Cast TempData["form"] to 
        System.Collections.Specialized.NameValueCollection 
        and use it */
    }

    return View("Form", viewData);
}

Dê uma olhada no MVCContrib , você pode fazer isso:

using MvcContrib.Filters;

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

Lembre-se de que TempData armazena a coleção de formulários na sessão. Se você não gostar desse comportamento, poderá implementar a nova interface ITempDataProvider e usar outro mecanismo para armazenar dados temporários. Eu não faria isso, a menos que você saiba de fato (via medição e criação de perfil) que o uso do estado Session está prejudicando você.


Se você deseja passar dados para a ação redirecionada, o método que você pode usar é:

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




asp.net-mvc