【问题标题】:jQuery Dialog Close Event not working as expectedjQuery 对话框关闭事件未按预期工作
【发布时间】:2012-02-29 20:05:26
【问题描述】:

我正在尝试使用 CodeBehind 事件和 JavaScript 事件创建一个弹出对话框。我创建了一个按钮来启动以下对话框。效果很好。

<script type="text/javascript">

    function ShowDialog(aPage, aWidth, aHeight, aTitle) {
        var $popupURL = aPage;
        var $popupDv = $("#resultDiv");

        jQuery.ajax({ url: $popupURL,
            cache: false,
            success: function (html) {
                $popupDv.empty().append(html);

                $popupDv.dialog({
                    width: aWidth,
                    height: aHeight,
                    modal: true,
                    title: aTitle,
                    draggable: false,
                    resizable: false
                });
            }
        });
    }

</script>

按键代码:

<form id="form1" runat="server">
<div>
    <div id="resultDiv">
    </div>
    <input id="Edit1Button" type="button" value="Edit 1" onclick="ShowDialog('edit3.aspx?ID=1', 600, 400, 'Hello Edit 1')" />
</div>
</form>

请记住,这只是测试代码。好的,所以在我单击按钮后会弹出一个对话框。在对话框中,我有以下代码..

<form id="form2" runat="server">
<div>
    <h1>
        Edit Dialog 3</h1>
    <asp:Button ID="CloseButton" runat="server" Text="Close" OnClick="CloseButton_Click"
        OnClientClick="$('#resultDiv').dialog('close'); return true;" />
</div>
</form>

如果我返回 false,那么只会触发 javascript OnClientClick 并关闭对话框。按预期工作。如果我设置 return true 对话框关闭,但这就是问题所在。主窗体消失并被对话框窗体取代..

我需要这个按钮在代码隐藏中执行 CloseButton_Click 然后关闭对话框。我对 asp.net 和 C# 还很陌生,所以对你的回答要温柔.. 像几周

谢谢 安东尼

【问题讨论】:

  • 您的两个表单具有相同的 ID。这是一个禁忌。
  • 对不起..我将edit3中的表单重命名为form2..这只是我放在一起的一个快速示例..这是一个oversite..仍然不起作用..

标签: jquery asp.net dialog jquery-ui-dialog


【解决方案1】:

发生的情况是,由于您的子表单 (Edit3.aspx) 正在回发到网络服务器,ASP.NET 正在发回对 Edit3.aspx 的响应 - 而不是您的初始表单。为了完成您想要的,您将不得不使用异步回发到服务器。这可以通过将 Edit3.aspx 表单更改为以下内容来完成:

<form id="form2" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div> 
<h1 runat="server" id="edit3"> 
    Edit Dialog 3</h1> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="CloseButton" runat="server" Text="Close" OnClientClick="$('#resultDiv').dialog('close'); return true;" /> 
</ContentTemplate>
</asp:UpdatePanel>
</div> 

ScriptManager 控件和 UpdatePanel 控件允许您的表单异步回发到服务器。

【讨论】:

  • 好的...我已经完成了一半...有没有办法在对话框关闭时触发事件。请记住,必须将事件传递给 ShowDialog(),因为我将从多个位置调用该函数。
  • 您希望该事件触发 CodeBehind 事件吗?在哪个页面上 - edit3.aspx 或父表单?
  • 父窗体.. 我在 Edit3 上触发了 CodeBehind.. 我需要在对话框返回时进行部分更新。
  • 我认为你可以在 CloseButton 的 OnClientClick 中添加以下内容: _doPostBack('_Page', 'MyCustomArgument'); ——看这篇文章。 stackoverflow.com/questions/2738327/…
  • 我修改了我的按钮,也许我做错了.. UpdateGridView1 是 CodeBehind 中的一个函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 2017-10-24
  • 1970-01-01
相关资源
最近更新 更多