2009-08-16 90 views
5

在我的网页我有以下的用户控件:ASP.NET用户控件和jQuery对话框

<div class="editFormDialog" style="display: none; font-size: 12px;"> 
    <mm:Form ID="editUC" ShowCreateButton="false" ShowEditButton="true" runat="server" /> 
</div> 

这UC具有公共属性,可以取一个数据集,并更新UC某些字段。

因此,当我按下我的页面上的按钮时,它会在UC上调用此属性,并且UC会使用DataSet中的数据进行更新。

到目前为止这么好。当我想让UC成为一个jQuery UI对话框时,问题就出现了。

首先我创建对话框:

$(document).ready(function() { 
    $('.editFormDialog').dialog({ 
     autoOpen: false, 
     height: 700, 
     width: 780, 
     modal: true, 
     bgiframe: true, 
     title: 'Rediger', 
     open: function(type, data) { 
      $(this).parent().appendTo("form"); 
      $(this).css('display', 'block'); 
     } 
    }); 
}); 

我wan't它在按钮按下打开(这不是一个ASP.NET按钮,纯HTML):

$('#btnEdit').live('click', function() { 
    $('.editFormDialog').dialog('open'); 
}); 

该对话框打开,但UC没有包含正确的数据。 当页面加载时,UC用默认数据更新。然后用户点击一个按钮,数据改变但UC不更新。它仍然包含默认数据。那就是问题所在。

你知道为什么吗?

帮助将非常感谢!

回答

1

当您“致电房产”时(我认为您的意思是一种方法),究竟会发生什么?该页面是否执行回发?如果是这样的话,那么当您将jQuery混合到场景中时,回发可能会被阻止?

+0

我点击一个按钮来获取下一个数据。回发发生。 UC中的属性设置为“editUC.EditData = ds;”。该页面提供了新的数据。现在,当我点击另一个使对话框弹出的按钮时,UC仍然包含默认数据。就像它没有在其数据源中注册更改一样。但是如果我在对话框外面显示UC,它可以很好地工作。 – 2009-08-16 12:16:21

+0

这听起来很奇怪:你能发布一些更多的源代码吗? – 2009-08-16 12:50:35

+0

它全部放置在更新面板中。是否可以在创建对话框时将其“移出”更新面板?也许另一种解决方案可能是在每次打开对话框时创建对话框,然后在关闭对话框时将其删除?当然,将html元素放在正确的位置。但我该怎么做? – 2009-08-16 13:34:53

0

由于您使用的是更新面板,您是如何将呼叫注入页面中的javascript的?我问,因为只有一种方法可以在部分回传中正常工作:ScriptManager.RegisterStartupScript()。这允许javascript代码充当页面被加载。当然,也可能会调用其他onload javascript,这可能会导致您看到的行为。

所以,

  1. 确保你的JavaScript被注入脚本管理器。
  2. 确保只有你想要一个局部回传后执行 被 执行

的JavaScript代码,还拥有一个Web服务把你的UC在AJAX控件来改变数据源的可能性。没有更多的部分回传,通常会提高页面的响应速度。

2

我发现了这个问题的解决方案。事实证明,当你追加到形式,你需要确保该段代码是jQuery的文档内准备:

$("#dialog1").parent().appendTo($("form:first")); 

所以,整个事情应该是这样的:

jQuery(document).ready(function() { 
    $("#<%=myFamilyGrid.ClientID %>").tablesorter({ 
     sortList: [[0, 1]] 
    }) 
     .tablesorterPager({ container: $("#pager") }); 


    $("#dialog1").dialog({ 
     modal: true, 
     height: 370, 
     width: "350px", 
     autoOpen: false, 
     bgiframe: false, 
     zIndex: 3999 
    }); 

    $("#dialog1").parent().appendTo($("form:first")); 
}); 

希望这有助于!