Pergunta

Estou tentando definir o HTML de um Iframe em tempo de execução, por trás de código.

Na minha página aspx eu tenho:

<asp:Button ID="btnChange" runat="server" Text="Change iframe content" 
onclick="btnChange_Click" />

<br />

<iframe id="myIframe" runat="server" />

no código por trás:

protected void btnChange_Click(object sender, EventArgs e)
{
    myIframe.InnerHtml = "<h1>Contents Changed</h1>";
}

Quando eu executo isso .... ele envia de volta, mas não altera o conteúdo myIframe em tudo ... O que estou fazendo de errado ??


Eu preciso fazer isso porque im implementação 3D Secure no meu processo de pagamento .. basicamente:

1) cliente entra em detalhes de cartão de crédito 2) formulário é enviado, os cheques com gateway de pagamento se 3d seguro é necessária. em caso afirmativo, url é gerado para os bancos local seguro para inserir informações 3) i criar uma solicitação POST a esta URL, que contém um longo Token de Segurança, e alguns outros bits de informação. i se apossar do HTML retornado desta solicitação POST, e necessidade de exibi-lo em um iFrame.

Aqui está o que diz a documentação que fazer:

<html>
<head>
<title>Please Authenticate</title>
</head>
<body onload="OnLoadEvent();">
<form name="downloadForm" action="https://mybank.com/vbyv/verify" method="POST">
<input type="hidden" name="PaReq" value="AAABBBBCCCCHHHHHH=">
<input type="hidden" name="TermUrl" value="https:// www. MyWidgits.Com/next.cgi">
<input type="hidden" name="MD" value="200304012012a">
</form>

<script language="Javascript"> <!-- function OnLoadEvent(){ document.downloadForm.target = "ACSframe"; document.downloadForm.submit(); } //--> </script>

<!-- MERCHANT TO FILL IN THEIR OWN BRANDING HERE -->
<iframe src="blank.htm" name="ACSframe" width="390" height="450" frameborder="0">
</iframe>
<!-- MERCHANT TO FILL IN THEIR OWN BRANDING HERE -->
</body>
</html>
Foi útil?

Solução

Você pode tentar o seguinte:

protected void btnChange_Click(object sender, EventArgs e)
{
   myIframe.Attributes["src"] = "pathtofilewith.html"
}

ou talvez isso vai funcionar também:

protected void btnChange_Click(object sender, EventArgs e)
{
   myIframe.Attributes["innerHTML"] = "htmlgoeshere"
}

Outras dicas

Não há nenhum atributo innerHTML para um iFrame. No entanto, desde HTML 5.0, há uma nova srcdoc atributo. http://www.w3schools.com/tags/tag_iframe.asp

Valor: HTML_code

Descrição: Especifica o conteúdo HTML da página para mostrar no