Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Onde guardar campos já preenchidos?

Tenho um formulário, preencho alguns dados e clico em um link para ir a uma View auxiliar.

Lá cadastro algo e ao Gravar sou redirecionado de volta ao meu formulário.

Quero salvar os meus dados já preenchidos, para não ter de preencher novamente.

Alguma sugestão?

Estes dados estão em algum lugar quando chego no Controller da View de destino? Um ActionLink leva os valores preenchidos?

7 respostas

Jaqueline,

Nesse caso vejo duas opções possíveis. A primeira delas é você utilizar essa view auxiliar como uma janela modal, onde ao chamar essa tela não seja necessário trocar de página nem dar refresh na página.

Outra opção é você pode usar o TempData pra guardar esses dados do primeiro formulário. Nesse caso você pode guardar o model inteiro mesmo e depois quando voltar pro primeiro formulário recuperar esse model e passar ele pra view.

O TempData é como o ViewBag, porém ele guarda as informações até que você utilize elas.

Abraço.

Obrigada pelas dicas Silvio,

A janela modal até que seria legal, mas nela quando eu cadastrasse a nova cidade, teria alguma forma de eu incluir essa cidade no dropdownlist da Janela principal?

E esse TempData, vou tentar ele primeiro, por que parece mais simples.

Como faço para guardar o model? Estou tentando assim:

public ActionResult GuardarDadosJaDigitados()
        {
            TempData["cliente"] = model.Cliente;

            return RedirectToAction("CreateFromCliente", "Cidades");
        }

Mas parece que ele não reconhece esse model.Cliente.

Que estou fazendo de errado?

E para restaurar depois é algo assim?

public ActionResult RestaurarDadosDigitados()
        {
            ClientePF cliente = TempData["cliente"];
            return View(cliente);
        }

Obrigada por qualquer ajuda.

Jaqueline,

No caso do TempData você deve receber o model por parâmetro da sua Index. Algo parecido com isso:

[HttpPost]
public ActionResult GuardarDadosJaDigitados(Cliente cliente)
{
    ...
}

E a utilização do TempData é essa mesma. Só não esqueça que pra recuperar os dados do TempData sempre é bom verificar se existe alguma coisa, dessa forma:

if (TempData["cliente"] != null)
{
    model.Cliente = TempData["cliente"] as Cliente.
}

Só pra garantir que não vai dar nenhum problema.

Abraço.

Obrigada.

Só mais duas duvidas.

Um ActionLink passa um parametro do model?

e a segunda dúvida mais de prática de programador:

Como faço para verificar (em Debug) se o parametro está chegando, se tem algo nele.

Tem algum tipo de Alert, que eu possa ver o valor da variavel naquele momento?

Vi alguns usando

Console.WriteLine(xxxx);

Mas não aparece nada quando uso.

solução!

No caso ali do ActionLink, de cabeça não lembro se por padrão o Asp.NET já manda os dados do formulário ou se você terá que fazer um submit do form pra isso. Mas nesse link que você está usando para redirecionar, podes usar um input do tipo 'submit' e apontar pra sua Index que por sua vez vai redirecionar para a View que você quer.

Sobre o debug, você pode utilizar esse comando System.Diagnostics.Debug.WriteLine("") que irá aparecer naquela janela de output do VisualStudio. No caso do Console.WriteLine("") é pra aplicações do tipo Console que abrem aquela janelinha preta do cmd.

Espero que isso te ajude.

Ótimo, o Debug.WriteLine funcionou legal, mas realmente o ActionLink não está passando o model como parâmetro.

Não entendi sua recomendação: usar um input do tipo 'submit' e apontar pra sua Index que por sua vez vai redirecionar para a View que você quer.

Tem como especificar para que um Submit tenha Action diferente do Form em que ele está inserido?

Eu acho que fiz uma confusão nesse caso ali, mas pelo que estive pesquisando você pode usar um input do tipo 'submit', que vai fazer o POST do form para o servidor e da sua controller você redireciona para a outra view. É essa a ideia.