Mudando um IFrame InnerHtml por trás de código
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>
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
O que você poderia usar como esta:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["srcdoc"] = "<h1>Contents Changed</h1>";
}
Você não pode mudar iframe innerHTML propriedade. Ele não tem innerHTML propriedade em tudo. Tente RegisterStartupScript e uso document.write para alterar o conteúdo do iframe uma vez que é uma janela.
A propósito, eu acho tag HTML é melhor lugar para isso.
<asp:Button ID="btnChange" runat="server" Text="Change iframe content" onclick="btnChange_Click" />
<br />
<asp:Literal id="myIframe" runat="server" />
in the code behind:
protected void btnChange_Click(object sender, EventArgs e){
myIframe.Text = "<h1>Contents Changed</h1>";
}
o que você precisa fazer é criar uma página aspx separado que está vazia e que obtém a resposta e carrega-lo em seu próprio corpo, em outras palavras, substituir-se, como
MyPage.aspx:
<%@ Page contentType="text/html" %>
//... using your namespace that contains the required functionality
<% Response.Write(MyObject.CreateBody()) %>
em seguida, coloque essa página dentro ur iframe ...
<iframe src="mypage.aspx" ... />
Simplificando, o iframe é uma janela do lado do cliente, você não pode fazer referência a seu corpo como um objeto do lado do servidor, ele has not sido carregado ainda!
ou ... você pode abrir um arquivo html, despejar a resposta, em seguida, salvar e fechar ... esse arquivo é referenciado pelo seu iframe sempre. Use o texto fluxo de objetos, ou FileSystemObject ou similar ...
PS. Eu não tentei nada disso