Cambiare un IFrame InnerHtml dal codice dietro
Domanda
Sto cercando di impostare il codice HTML di un Iframe in fase di esecuzione, dal codice dietro.
Nella mia pagina aspx ho:
<asp:Button ID="btnChange" runat="server" Text="Change iframe content"
onclick="btnChange_Click" />
<br />
<iframe id="myIframe" runat="server" />
nel codice dietro:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.InnerHtml = "<h1>Contents Changed</h1>";
}
Quando ho eseguito questo .... il postback, ma non cambia il contenuto myIframe a tutti ... Che cosa sto facendo di sbagliato ??
Ho bisogno di fare questo a causa im 3D attuazione sicuro nel mio processo di checkout .. in sostanza:
1) cliente entra dati della carta di credito 2) modulo viene inviato, controlli con gateway di pagamento, se è richiesto 3D Secure. in tal caso, l'URL viene generato per le banche luogo sicuro per immettere le informazioni 3) creo una richiesta POST a questo URL, che contiene una lunga token di sicurezza, e un paio di altri pezzi di informazioni. posso entrare in possesso del codice HTML restituito da questa richiesta POST, e la necessità di visualizzarlo in un iFrame.
Ecco quello che la documentazione dice di fare:
<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>
Soluzione
Si può provare questo:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["src"] = "pathtofilewith.html"
}
o forse questo funzionerà anche:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["innerHTML"] = "htmlgoeshere"
}
Altri suggerimenti
Non c'è nessun attributo innerHTML per un iFrame. Tuttavia, dal momento che HTML 5.0, c'è un nuovo srcdoc attributo. http://www.w3schools.com/tags/tag_iframe.asp
Valore: HTML_code
Descrizione: Specifica il contenuto HTML della pagina per mostrare nel
Che si potrebbe usare in questo modo:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["srcdoc"] = "<h1>Contents Changed</h1>";
}
Non è possibile modificare iframe proprietà innerHTML. Non ha proprietà innerHTML a tutti. Cercate di RegisterStartupScript e utilizzare document.write per modificare il contenuto del iframe dal momento che è una finestra.
A proposito, penso tag HTML è posto migliore per questo.
<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>";
}
quello che dovete fare è creare una pagina aspx separata che è vuoto e che ottiene la risposta e lo carica nel proprio corpo, in altre parole sostituirsi, come
MyPage.aspx:
<%@ Page contentType="text/html" %>
//... using your namespace that contains the required functionality
<% Response.Write(MyObject.CreateBody()) %>
quindi posizionare la pagina all'interno ur iframe ...
<iframe src="mypage.aspx" ... />
in poche parole, l'iframe è una finestra lato client, non è possibile fare riferimento il suo corpo come un oggetto dal lato server, che hasnt stato ancora caricato!
O ... è possibile aprire un file html, scaricare la risposta quindi salvare e chiudere ... quel file viene fatto riferimento dal vostro iframe sempre. utilizzare gli oggetti flusso di testo, o FileSystemObject o simili ...
PS. Non ho provato niente di tutto ciò