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

时间:2009-08-16 09:48:59

标签: asp.net jquery user-controls dialog

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

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

这个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不会更新。它仍包含默认数据。这就是问题所在。

你知道为什么吗?

非常感谢帮助!

3 个答案:

答案 0 :(得分: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"));
});

希望这有帮助!

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

所以,

  1. 确保您的javascript注入了脚本管理器。
  2. 确保只需要执行的javascript位 在部分回发之后 执行
  3. 还可以通过Web服务在ajax控件中转换UC来更改数据源。不再有部分回发,这通常可以提高页面的响应能力。