ASP.NET用户控件和jQuery对话框

在我的页面上,我得到了以下用户控件:

这个UC有一个公共属性,它接受一个DataSet,并更新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'); } }); }); 

我不想在按钮上打开(这不是ASP.NET按钮,纯HTML):

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

对话框打开,但UC不包含正确的数据。 页面加载时,UC将使用默认数据进行更新。 然后用户单击一个按钮,数据会发生变化但UC不会更新。 它仍包含默认数据。 那就是问题所在。

你知道为什么吗?

帮助将不胜感激!

当你“称之为财产”时,究竟会发生什么(我认为你的意思是它是一种方法)? 页面是否执行回发? 如果是这种情况,当你将jQuery混合到场景中时,可能会以某种方式阻止回发?

我找到了解决这个问题的方法。 事实certificate,当您附加到表单时,您需要确保这段代码在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")); }); 

希望这可以帮助!

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

所以,

  1. 确保你的javascript注入了脚本管理器。
  2. 确保只执行部分回发后要执行的javascript位

还可以通过Web服务将您的UC转换为ajax控件来更改数据源。 然后不再有部分回发,这通常会提高页面的响应能力。