2009-08-14 3 views
9

Я пытаюсь установить HTML-код iframe во время выполнения, начиная с кода.Изменение IFrames InnerHtml из codebehind

В моей странице ASPX я есть:

<asp:Button ID="btnChange" runat="server" Text="Change iframe content" 
onclick="btnChange_Click" /> 

<br /> 

<iframe id="myIframe" runat="server" /> 

в коде позади:

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

Когда я запускаю это .... это сообщения назад, но не изменяет содержимое myIframe на всех ... Что я делаю неправильно?


мне нужно сделать это, потому что им реализацию 3D обеспечения в мой процесс оформления заказа .. в основном:

1) клиент вводит данные кредитной карты 2) форма отправлена, чеки с платежным шлюзом, если 3d требуется защита. если это так, url генерируется для безопасного доступа банков для ввода информации 3) Я создаю запрос POST на этот URL-адрес, содержащий длинный токен безопасности и несколько других бит информации. я получаю HTML, возвращенный из этого запроса POST, и должен отображать его в iFrame.

Вот что сказано в документации, чтобы сделать:

<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

Мое предположение, почему выбрано iframe, потому что ответ сообщения содержит html head и body теги – mangokun

+1

, вероятно, лучший способ, чем ничего не делать, - извлечь необходимую информацию из ответа post, а не демпинга целиком как контент – mangokun

ответ

14

Вы можете попробовать это:

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

или, возможно, это тоже будет работать:

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

Вы не можете изменить IFRAME свойство innerHTML. Он вообще не имеет свойства innerHTML. Попробуйте RegisterStartupScript и используйте document.write для изменения содержимого iframe, так как это окно.

Кстати, я думаю, что HTML-тег лучше для этого.

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

то, что вам нужно сделать, это создать отдельную страницу ASPX, которая пуста и получает ответ и загрузит его в своем собственном теле, другими словами, заменить себя, как

mypage.aspx:

<%@ Page contentType="text/html" %> 
//... using your namespace that contains the required functionality 
<% Response.Write(MyObject.CreateBody()) %> 

затем поместить эту страницу в Уре IFRAME ...

<iframe src="mypage.aspx" ... /> 

просто говоря, IFRA me - это клиентское окно, вы не можете ссылаться на его тело как объект со стороны сервера, он еще не загружен!

ИЛИ ... вы можете открыть html-файл, сбросить ответ, затем сохранить и закрыть ... этот файл всегда ссылается на ваш iframe. использовать объекты текстового потока или файлы файловой системы или тому подобное ...

PS. я не пробовал ничего из этого

1

Для iFrame нет атрибута innerHTML. Однако, начиная с HTML 5.0, появляется новый атрибут srcdoc.http://www.w3schools.com/tags/tag_iframe.asp

Значение: HTML_code

Описание: Определяет содержание HTML страницы, чтобы показать в < IFRAME>

Что вы могли бы использовать так:

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