Cambio de un marco flotante InnerHtml de código subyacente
Pregunta
Estoy tratando de establecer el código HTML de un marco flotante en tiempo de ejecución, a partir del código atrás.
En mi página aspx tengo:
<asp:Button ID="btnChange" runat="server" Text="Change iframe content"
onclick="btnChange_Click" />
<br />
<iframe id="myIframe" runat="server" />
en el código detrás:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.InnerHtml = "<h1>Contents Changed</h1>";
}
Cuando corro esto .... que publica la espalda, pero no cambia el contenido myIframe en todos los ... ¿Qué estoy haciendo mal ??
Necesito hacer esto porque im 3D implementación segura en mi proceso de pago .. básicamente:
1) cliente entra en detalles de la tarjeta de crédito 2) formulario se envía, cheques con pasarela de pago si se requiere 3d seguro. si es así, se genera url para los bancos ubicación segura para introducir información 3) i crear una solicitud POST a esta URL, que contiene un token de seguridad de largo, y otros pocos bits de información. i controlar la HTML volvió de esta solicitud POST, y la necesidad de mostrarlo en un iFrame.
Aquí está lo que dice la documentación para hacer:
<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>
Solución
Puede intentar esto:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["src"] = "pathtofilewith.html"
}
o tal vez esto funcionará también:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["innerHTML"] = "htmlgoeshere"
}
Otros consejos
No hay ningún atributo innerHTML de un iFrame. Sin embargo, desde HTML 5.0, hay un nuevo srcdoc atributo. http://www.w3schools.com/tags/tag_iframe.asp
Valor: HTML_code
Descripción: Especifica el contenido HTML de la página para mostrar en la etiqueta
¿Qué se puede usar como esto:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["srcdoc"] = "<h1>Contents Changed</h1>";
}
No se puede cambiar la propiedad innerHTML iframe. No tiene propiedad innerHTML en absoluto. Trate de RegisterStartupScript y utilizar document.write para cambiar el contenido del iframe, ya que es una ventana.
Por cierto, creo etiqueta HTML es mejor lugar para esto.
<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>";
}
lo que hay que hacer es crear una página aspx separada que está vacío y que lo ponga la respuesta y lo carga en su propio cuerpo, en otras palabras reemplazarse a sí misma, como
MyPage.aspx:
<%@ Page contentType="text/html" %>
//... using your namespace that contains the required functionality
<% Response.Write(MyObject.CreateBody()) %>
a continuación, colocar dentro de esa página ur iframe ...
<iframe src="mypage.aspx" ... />
en pocas palabras, el iframe es una ventana del lado del cliente, no se puede hacer referencia a su cuerpo como un objeto del lado del servidor, que ya no haya sido cargado todavía!
O ... puede abrir un archivo html, volcar la respuesta a continuación, guardar y cerrar el archivo ... que es referenciado por su iframe siempre. usar objetos de flujo de texto, o FileSystemObject o similares ...
PS. No he probado nada de eso