Pergunta

Estou tornando um formulário de login comum usando html.renderaction, em todas as páginas do meu site.

Se o usuário inserir seus detalhes na caixa de texto e clicar em 'enviar', ele fará uma postagem para um controlador que lida com o login.

Se eles cometerem um erro, como inserir um endereço de email inválido, ele preencherá o ModelState com uma mensagem de erro e depois redirecionará a página em que estavam antes.

O problema é que, como a renderização ocorre como uma solicitação separada, estou perdendo o ViewModel.

Mesmo quando o coloquei em tempdata, ele se perde, já que o tempdata é liberado em cada solicitação separada.

Existe uma maneira de preservar os dados entre as chamadas consecutivas de HTML.RenderAction?

Caso contrário, alguma sugestão sobre como eu poderá invadir isso? (Deve colocar os dados em sessão?)

Foi útil?

Solução

Aqui está o que eu fiz por enquanto. (Esta provavelmente não é a solução mais ideal.)

Criei um 'PreserveViewDataattribute', que eu coloquei em qualquer ação pela qual eu queira preservar o ViewData na sessão.

No meu controle de base, substituo o método 'redirecionamento' com meu próprio método, que faz o seguinte.

  1. Recebe uma referência ao método de ação que o chamou (um pouco de reflexão aqui)

  2. Verifica se este método tem o 'preserveViewDataattribute' definido nele

  3. Se isso acontecer, copia o ViewData atual para uma variável de sessão. (O rótulo da variável é o mesmo que o nome de ação atual, com '_ViewData' preso no final.)

  4. Em ambos os casos, chama o método de redirecionamento base.

Em seguida, criei uma propriedade no controlador de bases chamado 'PreservationViewData', que retorna o ViewData em sessão, relevante para a ação atual. (Ou retorna nulo, se não for encontrado).

Assim, para preservar o ViewData, desde que eu queira, só preciso decorar minha ação com 'preserveViewDataattribute' e depois chamar 'preserviveViewData' sempre que eu precisar.

Deixe-me saber se você deseja o código de origem para isso.

Outras dicas

Você pode gostar desta abordagem da seção pós-redirect-get de Kazi Rashid.

http://weblogs.asp.net/rashid/archive/2009/04/01/asp-nalm-mvc-best-practices-part-1.aspx#prg

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top