Как динамически отображать ASPX в DIV другого ASPX во время выполнения? - PullRequest
11 голосов
/ 20 января 2010

Вот что я пытаюсь сделать в ASP.NET:

Создайте одну страницу с именем Main.aspx. На этой странице есть DIV и кнопки.

Браузер загружает Main.aspx. Затем, когда я нажимаю кнопку, я хочу загрузить страницу Page99.aspx в DIV в Main.aspx динамически, но без Main.aspx, требующего обратной передачи.

Итак, Main.aspx загружается один раз, и после этого весь контент, отображаемый в Main.aspx, будет поступать с разных страниц .aspx.

Ps. Я ищу решение, как указано выше, но не использую фреймы.

ОБНОВЛЕНИЕ 1 Я должен отметить, что Page99 не простая HTML-страница. Он будет содержать веб-элементы управления.

Ответы [ 5 ]

6 голосов
/ 20 января 2010

Если вы не хотите использовать 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>
4 голосов
/ 20 января 2010

Насколько я знаю, за исключением использования iframes, нет способа загрузить одну страницу aspx в другую.

С postbacks или ajax вы можете использовать вместо этого UserControls (ascx). Они могут содержать практически одинаковое содержимое страницы или использовать MasterPage.

Если вы не хотите создавать постбэки, вероятно, лучше использовать ajax, хотя, опять же, он не позволяет загружать страницу aspx в другую, а только для изменения содержимого страницы, на которой вы находитесь (среди прочих). вещи).

Я не уверен насчет других платформ для веб-разработки, хотя у них может быть решение, более близкое к тому, что вы хотите сделать, поэтому, если asp.net не является обязательным, вам следует рассмотреть возможность проверить другие платформы.

1 голос
/ 20 января 2010

Если вы используете инструментарий AJAX, это можно сделать с помощью веб-контроля, а не страницы ASPX.

Если вы попытаетесь реализовать эту идею, используя страницы ASPX и без использования iframe,вы обнаружите, что для имен переменных javascript и идентификаторов элементов не предусмотрена изоляция, поэтому почти гарантированы конфликты, если вы помещаете содержимое отрисованного aspx в div с помощью innerHTML;Страница определенно не сможет выполнить частичную обратную передачу, как я полагаю, вам бы хотелось.

Вместо этого используйте веб-контроль: Лучшим решением было бы установить инструментарий AJAX, если вы этого еще не сделали, и использоватьОбновление панели управления.Либо динамически загружайте и выгружайте веб-элементы управления внутри этой панели (используя LoadControl ()), либо размещайте в ней элемент управления Multiview и изменяйте activeview для имитации изменения этого содержимого.

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

0 голосов
/ 20 января 2010

Я думаю, что вы можете сделать это, используя 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;
0 голосов
/ 20 января 2010

Может быть, я что-то упустил.Но в этом случае вы можете использовать UFrame .

http://msmvps.com/blogs/omar/archive/2008/05/24/uframe-goodness-of-updatepanel-and-iframe-combined.aspx

...