2009-08-14 19 views
9

Ich versuche, den HTML-Code eines Iframe zur Laufzeit, von Code hinter.Ändern eines IFrames InnerHtml von Codebehind

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 ändert nicht die Inhalte myIframe überhaupt ... Was mache ich falsch ??


Ich muss dies tun, weil im Implementierung 3D in meinem Checkout-Prozess sichern .. im Grunde:

1) Kunde gibt Kreditkarten 2) Formular abgeschickt wird, prüft mit Payment-Gateway, wenn 3D sicher ist erforderlich. Wenn dies der Fall ist, wird die URL für den sicheren Standort der Bank generiert, um Informationen einzugeben. 3) Ich erstelle eine POST-Anfrage an diese URL, die ein langes Sicherheitstoken und ein paar weitere Informationen enthält. Ich erhalte den von dieser POST-Anfrage zurückgegebenen HTML-Code und muss ihn in einem iFrame anzeigen.

Heres, was die Dokumentation sagt 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> 
+0

meine Vermutung, warum iframe gewählt wird, ist, weil die Post Antwort HTML Kopf und Körper enthält Tags – mangokun

+1

wahrscheinlich ein besserer Weg als nichts zu tun ist, die notwendigen Informationen aus der Post-Antwort zu extrahieren, anstatt als Ganzes Inhalt zu dumpen – mangokun

Antwort

14

Sie können dies versuchen:

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

oder vielleicht wird dies auch funktionieren:

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

Sie nicht iframe ändern können innerHTML-Eigenschaft Es hat überhaupt keine innerHTML-Eigenschaft. Versuchen Sie, RegisterStartupScript zu registrieren, und verwenden Sie document.write, um den Inhalt des Iframes zu ändern, da es sich um ein Fenster handelt.

Übrigens denke ich, HTML-Tag ist besser Ort dafür.

0
<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>"; 
} 
0

, was Sie tun müssen, ist eine separate aspx Seite zu erstellen, die leer ist, und das wird die Antwort und lädt sie in ihrem eigenen Körper, mit anderen Worten selbst ersetzen, 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, der IFRA Ich bin ein Client-Seitenfenster, Sie können seinen Körper nicht als Objekt von der Serverseite beziehen, es wurde noch nicht geladen!

ODER ... Sie können eine HTML-Datei öffnen, die Antwort dumpen dann speichern und schließen ... Diese Datei wird immer von Ihrem iframe referenziert. Verwenden Sie Text-Stream-Objekte oder Dateisystemobjekte oder ähnliches ...

PS. ich habe es nicht probiert

1

Es gibt kein InnerHTML-Attribut für einen iFrame. Seit HTML 5.0 gibt es jedoch ein neues srcdoc Attribut.http://www.w3schools.com/tags/tag_iframe.asp

Wert: HTML_code

Beschreibung: der HTML-Inhalt der Seite Gibt im < iframe zeigen>

, die Sie mögen diese verwenden:

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