Вопрос

Я пытаюсь установить 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.я ничего из этого не пробовал

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top