Изменение IFrames innerHTML из codebehind
Вопрос
Я пытаюсь установить HTML-код Iframe во время выполнения из исходного кода.
На моей странице 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 secure в свой процесс оформления заказа..в основном:
1) клиент вводит данные кредитной карты 2) форма отправлена, проверяется с помощью платежного шлюза, требуется ли 3d secure.если это так, создается 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>
Решение
Вы можете попробовать это:
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"
}
Другие советы
Для iFrame нет атрибута innerHTML.Однако, начиная с HTML 5.0, появился новый srcdoc атрибут. http://www.w3schools.com/tags/tag_iframe.asp
Значение: html_код
Описание:Задает HTML-содержимое страницы, которое будет отображаться в < iframe >
Который вы могли бы использовать следующим образом:
protected void btnChange_Click(object sender, EventArgs e)
{
myIframe.Attributes["srcdoc"] = "<h1>Contents Changed</h1>";
}
Вы не можете изменить свойство iframe innerHTML.У него вообще нет свойства innerHTML.Попробуйте зарегистрировать startupscript и использовать document.write, чтобы изменить содержимое iframe, поскольку это окно.
Кстати, я думаю, что HTML-тег - лучшее место для этого.
<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>";
}
что вам нужно сделать, это создать отдельную пустую страницу aspx, которая получает ответ и загружает его в свое собственное тело, другими словами, заменяет саму себя, например
mypage.aspx:
<%@ Page contentType="text/html" %>
//... using your namespace that contains the required functionality
<% Response.Write(MyObject.CreateBody()) %>
затем поместите эту страницу внутрь вашего iframe...
<iframe src="mypage.aspx" ... />
проще говоря, iframe - это окно на стороне клиента, вы не можете ссылаться на его тело как на объект со стороны сервера, оно еще не загружено!
или...вы можете открыть html-файл, сбросить ответ, затем сохранить и закрыть...ваш iframe всегда ссылается на этот файл.используйте объекты текстового потока, filesystemobject или что-то подобное...
PS.я ничего из этого не пробовал