Как отображать ASPX в другом ASPX DIV динамически во время выполнения?
Вот что я пытаюсь сделать в ASP.NET:
Создайте одну страницу под названием Main.aspx. На этой странице есть DIV и кнопки.
Браузер загружает Main.aspx. Затем, когда я нажимаю кнопку, я хочу динамически загружать страницу Page99.aspx в DIV в Main.aspx, но без Main.aspx, требующей обратной передачи.
Итак, Main.aspx загружается один раз, и после этого весь контент, отображаемый в Main.aspx, будет поступать с разных страниц .aspx.
Ps. Я ищу решение, как описано выше, но не используя фреймы.
ОБНОВЛЕНИЕ 1
Я должен упомянуть, что Страница99 - это не простая HTML-страница. Он будет содержать веб-элементы управления.
Ответы
Ответ 1
Насколько я знаю, запрещая использование iframes, нет возможности загрузить одну страницу aspx в другую.
С помощью postbacks или ajax вы можете использовать UserControls (ascx) вместо этого. Они могут содержать в значительной степени тот же контент, что и страница, или использовать MasterPage.
Если вы хотите иметь никаких обратных передач, возможно, ajax - это путь, но, опять же, он не позволяет загружать страницу aspx в другую, только для изменения содержимого страницы, на которой вы находитесь (среди других вещи).
Я не уверен в других платформах для веб-разработки, но у них может быть решение ближе к тому, что вы хотите сделать, поэтому, если asp.net не является обязательным, вам следует рассмотреть возможность проверки других платформ.
Ответ 2
Если вы не хотите использовать iFrames, вы можете очень хорошо использовать элемент Object HTML. Следуйте здесь, чтобы увидеть и пример html. Вы можете очень хорошо использовать это для aspx также с некоторыми изменениями, например, используя свойство OnClientClick для кнопки aspx и т.д.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>mouseover image position</title>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<style type="text/css">
/*<![CDATA[*/
body
{
background-color:#aaaaff;
}
#one
{
position:absolute;
left:50%;
top:50%;
margin:-150px 0 0 -250px;
}
object
{
width:500px;
height:300px;
border:solid 1px #000000;
}
/*//]]>*/
</style>
<script type="text/javascript">
//<![CDATA[
// written by: Coothead
function updateObjectIframe(which){
document.getElementById('one').innerHTML = '<'+'object id="foo" name="foo" type="text/html" data="'+which.href+'"><\/object>';
}
//]]>
</script>
</head>
<body>
<div id="one">
<object id="foo" name="foo" type="text/html" data="http://www.w3schools.com/"></object>
</div>
<div>
<a href="http://www.google.com" onclick="updateObjectIframe(this); return false;">this is an object test not an iframe test</a>
</div>
</body>
</html>
Ответ 3
Если вы используете инструментарий AJAX, это можно сделать с помощью webcontrol, а не страницы ASPX.
Если вы попытаетесь использовать эту идею на ASPX-страницах и не используете iframe, вы обнаружите, что не существует изоляции для имен переменных javascript и идентификаторов элементов, что почти гарантирует конфликты, если вы помещаете отображаемый aspx-контент в div с помощью innerHTML; Эта страница, безусловно, не сможет выполнить частичную обратную передачу, как я предполагаю, вам понравится.
Вместо этого используйте webcontrol: лучшим решением было бы установить набор инструментов AJAX, если вы еще этого не сделали, и использовать элемент управления updatepanel. Либо динамически загружайте и выгружайте webcontrols внутри этой панели (используя LoadControl()), либо размещайте внутри нее элемент управления Multiview и меняйте активное представление, чтобы имитировать изменение этого содержимого.
Пакет обновления позволит обновлять его содержимое без полной обратной передачи (обновление страницы).
Ответ 4
Может, я что-то упустил. Но вы можете использовать UFrame в этом случае.
http://msmvps.com/blogs/omar/archive/2008/05/24/uframe-goodness-of-updatepanel-and-iframe-combined.aspx
Ответ 5
Я бы подумал, что вы можете сделать это с помощью AJAX и веб-метода на сервере.
Кнопка (кнопки) на странице вызывает веб-метод с использованием AJAX, с различными аргументами для правильной загрузки страницы в DIV.
Веб-метод загружает правильную страницу с помощью обычного веб-запроса.
Например:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://servername/filename.aspx");
WebResponse response = request.GetResponse();
Затем метод вернет HTML, сгенерированный ASPX файлом, обратно клиенту.
Когда клиент получает обратный вызов, он может дешифровать HTML-код и поместить его в div.
Например:
var startOfHTML = response.indexOf('<');
var endOfHTML = response.indexOf('</string>');
response = response.substring(startOfHTML, endOfHTML);
response = response.replace(/</g, "<");
response = response.replace(/>/g, ">");
var div = document.getElementById("myDIV");
div.innerHTML = response;