jQuery.load()中的UpdatePanel - ed back内容在回发时突破了页面

时间:2013-05-23 14:43:25

标签: c# jquery updatepanel postback

作为我的情况的前言,应该注意我使用的是ASP.NET(C#)和jQuery。

所以,这是布局:我有一个顶部div(标题/菜单),跨越页面的整个水平长度。在这个标题/菜单下,我有2个其他div。左边div是一个带有页面链接的导航div。右侧div是Ajax从左侧div中的链接加载的页面的显示div。

让我们看看我是否可以画出来......

=====================================================
= Top Div              (header/menu)                =
=====================================================
=               =                                   =
=               =                                   =
=               =                                   =
=               =                                   =
= Left Div      =  Right Div                        =
= (Navigation)  =  id = "rightdiv"                  =
=               =  (Displays content loaded by      =
=               =   Ajax from the links in the      =
=               =   left div)                       =
=               =                                   =
=               =                                   =
=               =                                   =
=               =                                   =
=====================================================

到目前为止,一切正常。我可以单击左侧div中的链接,然后使用jQuery ... $('#rightdiv').load('pagenamehere.aspx');

将它们加载到右侧div中

这是问题......

我正在加载到右侧div的页面包含一个UpdatePanel(每页1个)。当单击UpdatePanel中的按钮(它应该仅刷新UpdatePanel本身中的内容)时,它会将内容从正确的div中拉出(它实际上转到该页面)并刷新UpdatePanel中的内容,就像我访问过一样该页面本身并按下按钮。

我的问题是......

如何防止这种情况并让UpdatePanel在使用Ajax引入的页面上运行?

这是一些额外的(奇怪的)信息......

我显示加载整体布局的原始时间('5/23/2013 10:15:11 AM')。

我在一个页面中的Ajax到正确的div并显示它被加载的时间(在该页面本身但在UpdatePanel之外)('5/23/2013 10:15:17 AM')。这表明我在加载布局几秒后点击左侧div中的页面链接。

当我点击按钮刷新UpdatePanel时,它会显示我点击UpdatePanel内部按钮的时间('5/23/2013 10:15:28 AM')。此时,它将页面从右侧div拉出(好像我从头开始转到此页面)并且它保留了此页面加载到右侧div中的原始DateTime('5/23/2013 10 :上午15点17分')。

=====

我已尝试过各种形状和形式来修改UpdatePanel和ScriptManager,试图阻止它这样做,但无济于事。

我甚至尝试将UpdatePanel放在右侧div而不是每个内容页面上(这样使用Ajax加载的页面只会在发回时刷新该div)。

我确信有一种方法可以通过Ajax加载页面上的UpdatePanel,但我似乎无法在任何地方找到一个可行的示例或答案。

非常感谢任何帮助。感谢。

编辑1:

当右侧div中的内容执行PostBack(因此需要UpdatePanel)时,我们不希望在左侧div(由Ajax引入)中进行搜索。如果它从右侧div执行PostBack,则将刷新整个布局,而不仅仅是右侧div中的内容。

编辑2:

我应该澄清一点,这只是我们想要完成的一个简单例子。我们希望将右侧div(整个.aspx页面)中的内容发送到PostBack,但只能在UpdatePanel中。我们需要这个功能,以便在右侧div页面的PostBack上不刷新整个布局(顶部div,左侧div和右侧div)。

基本上,我们需要能够在正确的div中进行PostBack,而无需更改top和left div。当我们通过Ajax引入正确的页面时,右侧页面上的UpdatePanel似乎不尊重布局并突破它。

2 个答案:

答案 0 :(得分:2)

听起来你的HTML正在加载一个完整的页面。尽管.load()将删除某些HTML元素,但它可能会插入一个额外的< title>标签等。

这是一个包含两个文件的简单示例。

以待loaded.html

<!DOCTYPE html>
<html>
<head>
<title>To Be Loaded</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
  <div id="my-div"></div>
  <script>
    $("#my-div").load('/load-me.html #load-me ul');
  </script>
</body>
</html>

<强>负载me.html

<!DOCTYPE html>
<html>
<head>
<title>Load Me</title>
</head>
<body>
<div id="load-me">
  <ul>
    <li>First Item</li>
    <li>Second Item</li>
 </ul>
</div>
</body>
</html>

执行加载调用后,div#my-div将包含load-me.html中无序列表的内容。

答案 1 :(得分:1)

嗯,如果没有调整,我无法确定发生了什么,但也许你应该考虑采用不同的方法。

例如,为什么不加载带有更新面板的正确div呢?

为什么不用更新面板加载右面板的一部分,还有另一个jquery ajax加载?

希望这有帮助。