【问题标题】:ASP.NET user control and jQuery dialogASP.NET 用户控件和 jQuery 对话框
【发布时间】:2009-08-16 09:48:59
【问题描述】:

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

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

你知道为什么吗?

我们将不胜感激!

【问题讨论】:

    标签: asp.net jquery user-controls dialog


    【解决方案1】:

    我找到了这个问题的解决方案。事实证明,当您追加到表单时,您需要确保这段代码的 sn-p 已准备好在 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"));
    });
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我点击一个按钮来获取下一个数据。发生回发。 UC 中的属性设置为“editUC.EditData = ds;”。该页面提供了新数据。现在,当我单击另一个弹出对话框的按钮时,UC 仍然包含默认数据。就像它没有在其数据源中注册更改一样。但如果我在对话框外显示 UC,它就可以完美运行。
      • 这听起来很奇怪:你能再发布一些你的源代码吗?
      • 它都放在更新面板中。可以是当我创建对话框时,它被“移到”更新面板之外了吗?也许另一种解决方案可能是在每次打开对话框时创建对话框,然后在关闭时将其删除?当然将 html 元素放在正确的位置。但是我该怎么做呢?
      • 好吧,在 jQuery 和 ASP.NET AJAX 这样玩的情况下,我肯定会尝试稍微简化一些事情以跟踪这一点。很抱歉,我无法提供更多帮助。 :)
      • 有没有办法用 jQuery AJAX 替换 ASP.NET AJAX?有这方面的文章吗?
      【解决方案3】:

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

      所以,

      1. 确保您的 javascript 被脚本管理器注入。
      2. 确保只有您想要执行的 javascript 位 在部分回发之后 执行

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

      【讨论】:

        猜你喜欢
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-22
        相关资源
        最近更新 更多