Asp.net 如何在另一个ASPX中显示ASPX';s DIV在运行时是动态的吗?

Asp.net 如何在另一个ASPX中显示ASPX';s DIV在运行时是动态的吗?,asp.net,include,dynamic,Asp.net,Include,Dynamic,以下是我在ASP.NET中尝试执行的操作: 创建一个名为Main.aspx的页面。此页面有一个DIV和一个按钮 浏览器将加载Main.aspx。然后,当我单击该按钮时,我想动态地将页面Page99.aspx加载到Main.aspx中的DIV中,但Main.aspx不需要回发 因此,Main.aspx加载一次,此后Main.aspx中显示的所有内容将来自不同的.aspx页面 Ps.我正在寻找如上所述的解决方案,但不使用框架 更新1 我应该提到,Page99不是一个简单的HTML页面。它将包含Web

以下是我在ASP.NET中尝试执行的操作:

创建一个名为Main.aspx的页面。此页面有一个DIV和一个按钮

浏览器将加载Main.aspx。然后,当我单击该按钮时,我想动态地将页面Page99.aspx加载到Main.aspx中的DIV中,但Main.aspx不需要回发

因此,Main.aspx加载一次,此后Main.aspx中显示的所有内容将来自不同的.aspx页面

Ps.我正在寻找如上所述的解决方案,但不使用框架

更新1
我应该提到,Page99不是一个简单的HTML页面。它将包含Web控件。

据我所知,除非使用iFrame,否则无法将一个aspx页面加载到另一个页面

对于回发或ajax,您可以改用UserControls(ascx)。它们可以包含与页面几乎相同的内容,也可以使用母版页

如果您希望不进行回发,ajax可能是一个不错的选择,不过,它不允许您将一个aspx页面加载到另一个页面,只允许您更改页面的内容(以及其他内容)

我不确定其他的Web开发平台,它们可能有一个更接近你想要做的解决方案,所以如果ASP.NET不是一个“必须”,你应该考虑检查其他平台。 感谢@GårÐåñ的提醒

UFrame似乎已经存档,不再活跃 开发并给出关于已经发生的错误的帖子数量 没有回答

原始答案 也许我错过了什么。但在这种情况下,您可以使用


(不再有效)

如果不想使用iframe,可以很好地使用HTML的Object元素。请按照此处查看和html示例。您可以很好地将其用于aspx,但也需要做一些更改,例如为aspx按钮使用OnClientClick属性等

<!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>

鼠标悬停图像位置
/**/
//

我认为您可以在服务器上使用AJAX和web方法来实现这一点

页面上的按钮使用AJAX调用web方法,并使用各种参数将正确的页面加载到DIV中。 web方法使用普通web请求加载正确的页面

例如:

然后,该方法将ASPX文件生成的HTML返回给客户端。 当客户端获得回调时,它可以对HTML进行反编码并将其放入div中

例如:

var startOfHTML=response.indexOf(“”);
var endOfHTML=响应指数(“”);
response=response.substring(startOfHTML,endOfHTML);
response=response.replace(//g,“”);
var div=document.getElementById(“myDIV”);
div.innerHTML=响应;

如果您使用的是AJAX工具包,那么应该可以使用webcontrol而不是ASPX页面来实现这一点

如果您尝试使用ASPX页面来实现这一想法,而不使用iframe,您将发现javascript变量名和元素ID没有提供隔离,因此,如果您使用innerHTML将呈现的ASPX内容放入div中,几乎可以保证冲突;这个页面肯定不能像我想象的那样执行部分回发

改用webcontrol:更好的解决方案是安装AJAX工具包(如果您还没有安装),并使用updatepanel控件。可以在此面板内动态加载和卸载WebControl(使用LoadControl()),也可以在其中放置多视图控件并更改activeview以模拟更改此内容


updatepanel将允许其内容在不进行完全回发(页面刷新)的情况下进行更新。

UFrame仍然使用iframe,根据问题,这不是一个选项。@SirDemon,UFrame没有像本文中提到的Omar那样使用iframe。万一有人遇到这个问题,这个项目似乎已经存档,不再积极开发,而且鉴于有大量关于错误的帖子没有得到解答,我个人建议不要使用这个解决方案,尽管如果它是最新的,那会很好。@GårÐåñ,谢谢你的帮助,如果Page99是一个用户控件,那么这个“嵌入”可以在运行时使用AJAX单击按钮时完成?[你能给我举一些你知道的例子吗,因为我还没有找到关于这样做的任何具体信息(找到了关于includes的信息,但这在我的案例中不起作用)。@Liao-你应该读一下UpdatePanel:我读了一点,但不多;ascx可能是最好的方法,但是有一些方法可以使用jquery.load将一个aspx页面加载到另一个页面中,或者查看下面的答案——这非常好而且非常简单!另一方面,当事情有一个简单的解决方案时,有时你会想“这会这么简单吗?”。在这种方法中有什么陷阱/注意事项吗?这种方法的一个可能陷阱(如果您的内部页面确实是aspx)是,您的viewState和两个页面的回发可能会相互冲突,尽管有解决方法。通常HTML方法不起作用。在我的例子中,它无法呈现报告URL。在我看来,这是一个跨脚本问题,但当通过IIS中托管页面的管理员帐户进行访问时,它会起作用。面对这一点,我需要采取一些其他的方法;但我认为如果Page99上有Web控件,这种方法将不起作用。我说的对吗?你最终会尝试在页面中插入多个html、body和head标记。viewstate字段也将被复制,因此回发可能不再有效,正如您正确指出的,Page99上的控件(如果有效)将导致整个页面回发,并且必要的回发信息肯定不会被路由回Page99,而是最终返回到父页面(可能会导致控件树中出现“视图状态i”
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://servername/filename.aspx");
WebResponse response = request.GetResponse();
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;