1

作为我的情况的前言,应该注意我使用的是 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... 将它们加载到右侧 div 中$('#rightdiv').load('pagenamehere.aspx');

这就是问题所在...

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

我的问题是...

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

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

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

我在右侧 div 的页面中 Ajax 并显示加载时间(在该页面本身上但在 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 AM')。

=====

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

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

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

任何帮助深表感谢。谢谢。

编辑1:

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

编辑2:

我应该澄清一下,这只是我们试图完成的一个简单示例。我们希望将正确 div(整个 .aspx 页面)中的内容回发到 PostBack,但仅限于 UpdatePanel 中。我们需要这种能力,以便整个布局(顶部 div、左侧 div 和右侧 div)不会在右侧 div 页面的 PostBack 上刷新。

基本上,我们需要能够在不更改顶部和左侧 div 的情况下在右侧 div 中进行 PostBack。当我们通过 Ajax 引入正确的页面时,正确页面上的 UpdatePanel 似乎不尊重布局并打破它。

4

2 回答 2

2

听起来你的 HTML 正在被加载一个完整的页面破坏。即使 .load() 会去除某些 HTML 元素,它也可能会插入一个额外的 <title> 标签等。

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

待加载.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>

加载我.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 的无序列表的内容。

于 2013-05-23T15:37:46.053 回答
1

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

例如,您为什么不使用更新面板加载正确的 div 呢?

或者

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

希望这可以帮助。

于 2013-05-23T14:52:10.467 回答