none
Minha action HttpGet é chamada apenas uma vez no src de uma tag object após um post jquery RRS feed

  • Pergunta

  • Seguinte, eu tenho uma tah object que é carregada dinâmicamente por javascript. Essa tag eu carrego após um post jquery:

    $.post('@Url.Action("ShowCredential", "ManageCredentials")',  
        $
    (form).serialize(), function(url) { 
            document
    .getElementById("credential_preview").innerHTML = "<object id='credencial_atual' type='application/pdf' classid='clsid:CA8A9780-280D-11CF-A24D-444553540000' width='250' height='420' style='border: 1px solid'> <param name='src' value='" + url + "#navpanes=0&scrollbar=0&zoom=100%' /></object>"; 
     
        $
    ("#preview_popup").show(); 
    }); 

    Obs: eu carrego a variável form com o form da página.

    Na minha action "ShowCredential" eu carrego um pdf em um byte[] e armazeno na sessão do usuário:

    [HttpPost] 
    public string ShowCredential(/* the attributes to help to load the pdf */) 
    { 
       
    // Loading my pdf... 
       
    Session.User.CurrentPDF = // set the pdf loaded 
     
       
    UrlHelper urlHelper = new UrlHelper(this.ControllerContext.RequestContext); 
       
    string url = urlHelper.Action("GetPDF", "ManageCredentials"); 
     
       
    return url; 
    } 

    A url retornada é gerada com a action que irá retornar o pdf:

    [HttpGet] 
    public FileResult GetPDF() 
    { 
       
    return File(Session.User.CurrentPDF, "application/pdf"); 
    } 

    Então, na primeira vez, ok, o pdf é carregado com os dados corretamente, porém nas próximas vezes sempre está vindo o mesmo pdf, porquê? (já chequei se os dados que estou passando estão sendo mudados e etc..)

    Obs: quando eu dou o post dos dados para carregar o pdf, meu código chama a action GetPDF que é colocada na tag object, isso na primeira vez, porém nas próximas vezes, essa action não está sendo chamada...


    Caso esse post foi útil para você não esqueça de "Votar como Útil". =)

    sexta-feira, 10 de fevereiro de 2012 12:21

Respostas

  • Bem, resolvido. Basicamente o asp.net tava guardando o link no cache, de forma que não estava sendo chamada a action. Para resolver isso, criei um Attribute NoCache que herda de ActionFilter, que limpa tudo:

    public class NoCache : ActionFilterAttribute 
    {   
       
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
       
    { 
            filterContext
    .HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
            filterContext
    .HttpContext.Response.Cache.SetValidUntilExpires(false); 
            filterContext
    .HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
            filterContext
    .HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
            filterContext
    .HttpContext.Response.Cache.SetNoStore(); 
     
           
    base.OnResultExecuting(filterContext); 
       
    } 
    } 

    Caso esse post foi útil para você não esqueça de "Votar como Útil". =)

    • Marcado como Resposta Vinícius Ottoni sexta-feira, 10 de fevereiro de 2012 13:13
    sexta-feira, 10 de fevereiro de 2012 13:13