Как отображать 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 и меняйте активное представление, чтобы имитировать изменение этого содержимого.

Пакет обновления позволит обновлять его содержимое без полной обратной передачи (обновление страницы).

Ответ 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('&lt;');
var endOfHTML = response.indexOf('</string>');

response = response.substring(startOfHTML, endOfHTML);
response = response.replace(/&lt;/g, "<");
response = response.replace(/&gt;/g, ">");

var div = document.getElementById("myDIV");
div.innerHTML = response;