Ändern eines IFrame Innerhtml von Code hinter
Frage
Ich versuche, die HTML eines Iframes zur Laufzeit festgelegt, aus dem Code hinter sich.
In meiner aspx Seite ich habe:
<asp:Button ID="btnChange" runat="server" Text="Change iframe content"
onclick="btnChange_Click" />
<br />
<iframe id="myIframe" runat="server" />
im Code hinter:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.InnerHtml = "<h1>Contents Changed</h1>";
}
Wenn ich diese laufen .... es postet zurück, aber nicht den Inhalt myIframe überhaupt ändern ... Was mache ich falsch ??
Ich muss dies tun, weil im Implementierung 3D in meine Kasse sichern .. Grundsätzlich gilt:
1) Kunde gibt Kreditkartendaten 2) Form vorgelegt wird, prüft mit Payment-Gateway, wenn 3D Secure ist nicht erforderlich. wenn dies der Fall ist, URL für die Banken sicheren Ort erzeugten Informationen einzugeben 3) mache ich eigentlich eine POST-Anforderung an diese URL, die eine lange Sicherheits-Token enthält, und ein paar andere Informationen. i habhaft der HTML-Code aus dieser POST-Anforderung zurückgegeben, und muß es in einem iFrame angezeigt werden soll.
Heres, was die Dokumentation sagt zu tun:
<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>
Lösung
Sie können versuchen, diese:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["src"] = "pathtofilewith.html"
}
oder vielleicht wird diese Arbeit auch:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["innerHTML"] = "htmlgoeshere"
}
Andere Tipps
Es gibt kein innerHTML- Attribut für ein iFrame. Da jedoch HTML 5.0, gibt es ein neues srcdoc Attribut. http://www.w3schools.com/tags/tag_iframe.asp
Wert: HTML_code
Beschreibung: Gibt den HTML-Inhalt der Seite zu zeigen, in dem
Was Sie wie folgt verwenden können:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["srcdoc"] = "<h1>Contents Changed</h1>";
}
Sie können nicht iframe Eigenschaft Innerhtml ändern. Es hat nicht innerHTML- Eigenschaft überhaupt. Versuchen Sie, und verwenden Sie Registerstartup document.write den Inhalt des iframe zu ändern, da es sich um ein Fenster ist.
Übrigens, ich glaube, HTML-Tag einen besseren Ort dafür ist.
<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>";
}
, was Sie tun müssen, um eine separate aspx Seite erstellen, die leer ist, und das wird die Antwort und lädt sie in ihrem eigenen Körper, mit anderen Worten ersetzen selbst, wie
MyPage.aspx:
<%@ Page contentType="text/html" %>
//... using your namespace that contains the required functionality
<% Response.Write(MyObject.CreateBody()) %>
legen Sie dann die Seite innerhalb ur iframe ...
<iframe src="mypage.aspx" ... />
einfach ausgedrückt, die iframe ein Client Seitenfenster ist, kann man nicht seinen Körper als Objekt von der Server-Seite verweisen kann, ist es noch geladen worden has not!
oder ... können Sie eine HTML-Datei öffnen, sichern Sie die Antwort dann speichern und schließen ... die Datei von Ihrem iframe immer referenziert wird. verwenden Text-Stream-Objekte oder Filesystem oder dergleichen ...
PS. Ich habe nichts davon versucht