Asp .Net MVC RedirectToAction com URL absoluto

votos
8

Eu escrevi um applicaton Asp .Net MVC que é executado dentro de um iframe. Quando um dos meus métodos controlador retorna RedirectToAction (), eu quero o topo URL do navegador para redirecionar para o endereço, não apenas a minha IFrame. Como eu iria fazer isso? Porque eu estou correndo dentro de outro site, eu terá de passar um URL absoluto para o navegador IE ' http://parentsite.com/myapp/ {controlador} / {ação}'

Eu acho que é o equivalente a definir o atributo de destino dos meus links para '_top' para que todo o site redireciona (este será bastante simples, estendendo o HtmlHelper), mas como eu posso fazê-lo para o lado do servidor redireciona?

Até agora, a minha solução é substituir OnResultExecuting, extrair o URL pretendo redirecionar para, em seguida, em vez disso, redirecionar para um quadro disjuntor Ver passando a URL I originalmente destinados para redirecionar como um parâmetro. O quadro disjuntor Ver simplesmente escreve algumas javascript que define a URL do navegador superior à minha URL original. Esta abordagem tem uma solicitação HTTP adicional do que eu gostaria, mas pelo menos não viola quaisquer princípios MVC (eu não acho!). Pensamentos?

obrigado

Publicado 19/05/2009 em 22:59
fonte usuário
Em outras línguas...                            


3 respostas

votos
7

Use Redirect()em vez de RedirectToAction()e passar na url.

Editar:

Eu acho que você vai precisar de algum JavaScript para sair do iframe no lado do cliente. Redirecionando para uma URL só afetará o quadro atual.

Respondeu 19/05/2009 em 23:07
fonte usuário

votos
3

Passar o seu URL de volta ao seu ponto de vista ou talvez você poderia usar Url.RouteUrl () na própria View.

Assim, por exemplo ...

public ActionResult handback ()
{
   retornar View (your_absolute_url);
}

Então sua visão pode usar esse valor para fazer um redirecionamento. Use o Javascript para detectar se há um pai, em seguida, definir o local o mais fazê-lo na janela atual. O exemplo abaixo, em vez de usar o ponto de vista com rigidez, utiliza RouteUrl a um controlador / ação específica.

Espero que isto ajude.

<Html>
<Head>
    <Title> </ title>
</ Head>
<Body>
    <Script type = "text / javascript">
        if (WINDOW.PARENT! = null)
            window.parent.location = '<% = Url.RouteUrl (novo { 
                  controller = "MyController", action = "MyAction"})%> ';
        outro
            window.location = '<% = Url.RouteUrl (novo { 
                  controller = "MyController", action = "MyAction"})%> ';
    </ Script>
</ Body>
</ Html>
Respondeu 20/05/2009 em 02:43
fonte usuário

votos
2

Eu recomendo estendendo o HtmlHelper e usá-lo no lado do servidor redireciona também:

return Redirect(Url.YourExtension());
Respondeu 19/05/2009 em 23:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more