JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法

jquery-easyui是一个基于jquery的图形界面插件,利用easyui可以创建很多好看的网页界面效果,easyui的相关地址是:http://jquery-easyui.wikidot.com/; easyui的中文文档地址是:http://www.easyui.net/,本人也利用easeyUI在做一些页面效果。由于我很喜欢那种弹出的对话框界面,因此在界面中应用了Dialog类来处理一些确认的信息,但在利用中发现,弹出的对话框,不能再继续执行asp.net按钮的后台响应代码。界面如下所示。

操作是在按钮提交后,弹出一个对话框层,用来确认流程的信息,不过奇怪的是里面原本是asp.net图片服务器控件却不能提交了,无法触发后台按钮,其中页面的代码如下所示,注意如果要对话框默认开始不显示出来,通过设置closed:true,属性即可。

    <script language="javascript">
        $(function(){
            var dlg = jQuery("#dd").dialog({
                draggable: true,
                resizable: true,
                closed:true,
                show: 'Transfer',
                hide: 'Transfer',
                autoOpen: false,
                width:600,
                minHeight: 10,
                minwidth: 10
            });
        });

        function open1(){
            $('#dd').dialog('open');
        }
        function close1(){
            $('#dd').dialog('close');
        }

    </script>

对应的弹出层内容如下所示:

        <div id="dd" title="处理流程" icon="icon-save" style="overflow:auto;padding:10px;">
        <table width="100%" cellpadding="0" cellspacing="1" border="0" id="Table1">
            <tr>
                <td >
                    <asp:DataGrid ID="dg" runat="server" Width="100%" CssClass="dg" AutoGenerateColumns="False"
                PageSize="20" AllowSorting="True" DataKeyField="ID" Height="0px" OnItemDataBound="dg_ItemDataBound">
                <EditItemStyle CssClass="EditItem"></EditItemStyle>
                <AlternatingItemStyle CssClass="AlternatingItem"></AlternatingItemStyle>
                <ItemStyle CssClass="Item"></ItemStyle>
                <HeaderStyle CssClass="Header"></HeaderStyle>
                <FooterStyle CssClass="Footer"></FooterStyle>
                <Columns>
                    <asp:TemplateColumn HeaderText="ID" Visible="false">
                        <ItemTemplate>
                            <asp:Label ID="lblId" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.id") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn HeaderText="序号">
                        <ItemTemplate>
                            <asp:Label ID="lblOrderbyId" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.OrderbyId") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn HeaderText="处理类型">
                        <ItemTemplate>
                            <asp:Label ID="lblproctype" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.proctype") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn HeaderText="流程名称">
                        <ItemTemplate>
                            <asp:Label ID="lblflowname" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.flowname") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn HeaderText="流程处理人">
                        <ItemTemplate>
                            <asp:Label ID="lblproc_user" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.procuser") %>'></asp:Label>
                            <asp:DropDownList ID="ddlproc_user" runat="server" Visible="false" />
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn HeaderText="流程步骤描述">
                        <ItemTemplate>
                            <asp:Label ID="lblmayaddflow" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.flownote") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
            </asp:DataGrid>
                </td>
            </tr>
        </table>
                    
        <table class="formitem_pagestyle" cellspacing="0" cellpadding="0" border="0" style="width: 100%;
            border-collapse: collapse;">
            <tr>
                <td class="pagebutton" align="right" style="height: 30px; width: 100%;">
                    <asp:ImageButton ID="imgbtnOK" runat="server" ImageUrl="~/Themes/Default/btn_savetobox.gif"
                        OnClick="imgbtnOK_Click" />&nbsp;
                    <img src="http://www.cnblogs.com/Themes/Default/btn_close.gif" border="0" onclick="close1()"/>
                </td>
            </tr>
        </table>
        </div>  
        <br /><br />
        <div align="center">   
            <img src="http://www.cnblogs.com/Themes/Default/btn_savetobox.gif" border="0" onclick="open1()"/>
            <asp:ImageButton ID="imgbtnBack" runat="server" ImageUrl="~/Themes/Default/btn_back.gif"
                        CausesValidation="false" OnClick="imgbtnBack_Click" />

         </div>   

搜索相关问题发现,其中主要问题是出在:JQuery会把Dialog的元素append到Body里面,而不是form里面。研究了页面源码后发现,jQuery UI Dialog控件初始化时动态生成的HTML元素被添加到页面的尾部、form元素的后面,而原始的Dialog模板部分(其内包含表单元素)也被移到了 动态生成的HTML元素内。也就是说,原先在form内的表单在Dialog初始化后就被移到form外了,这就导致了Dialog模板内表单全部失效。

解决方法是增加一行代码即可:dlg.parent().appendTo(jQuery("form:first")); 

也就是修改开始部分创建对话框的脚本即可:

    <script language="javascript">
        $(function(){
            var dlg = jQuery("#dd").dialog({
                draggable: true,
                resizable: true,
                closed:true,
                show: 'Transfer',
                hide: 'Transfer',
                autoOpen: false,
                width:600,
                minHeight: 10,
                minwidth: 10
            });
            dlg.parent().appendTo(jQuery("form:first"));
        });

        function open1(){
            $('#dd').dialog('open');
        }
        function close1(){
            $('#dd').dialog('close');
        }
    </script> 

 另外你也可以通过这种方法来处理该问题:

     $('#dialog_link').click(function () { 

       $('#dialog').dialog('open');
        $('#dialog').parent().appendTo($("form:first"))
        return false;

    });

本文转自博客园伍华聪的博客,原文链接:JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法,如需转载请自行联系原博主。

时间: 2024-08-31 23:34:00

JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法的相关文章

jquery easyui 弹出消息框 (转载)

jQuery EasyUI API 中文文档 - 消息框(Messager) http://www.cnblogs.com/hantianwei/archive/2012/03/19/2407113.html   <html> <head> <!-- 导入easyui插件的js和css样式; --> <link rel="stylesheet" type="text/css" href="/EasyuiDemo/s

jquery dialog弹出对话框插件使用方法

使用方法 2.1.默认参数 // 1. 对话框默认参数 // 标注[*]的项目表示可以重复修改的,即多次初始化 $.fn.dialog.defaults = {  // css样式链接地址  css: "http://static.qianduanblog.com/css/jquery-dialog/default.min.css?v=" + Math.ceil(Date.now() / 86400000),  // 对话框标题[*]  title: "Untitled&qu

非常强大的 jQuery.AsyncBox 弹出对话框插件_jquery

复制代码 代码如下: <link href="asyncbox/skins/ZCMS/asyncbox.css" rel="stylesheet" type="text/css" /> <script src="asyncbox/jQuery.v1.4.2.js" type="text/javascript"></script> <script src="

急急急!新手求助!!!easyui弹出对话框问题

问题描述 新手求助!!!!前台html:<divclass="main_tab"><ul><liclass="hov">景区列表</li><listyle="cursor:pointer;">添加景区</li></ul></div>js:function(){$(".main_tab>ul>li:eq(1)").clic

基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)_jquery

这是一款基于jQuery的弹出对话框插件,这个jQuery对话框插件的最大特点是弹出和关闭都带有非常炫酷的动画特效,比如旋转飞入.上下抖动飞入等.效果图如下: 效果演示     源码下载 html代码: <div class="container"> <h1>jQuery gDialog Plugin Exampels</h1> <button class="btn demo-1">Alert Dialog Box&l

PHP控制前台弹出对话框的实现方法_php实例

应用场景: 微信授权登录过程中,需要用户确认,故衍生此需求: 相应的逻辑不放在前端的原因是,此部分逻辑属于偏功能业务,所以放在后端,方便统一管理. 解决办法: 通过php echo出javascript脚本,这里需要关注的一点是缓冲区. 缓冲区应该是有三个部分,分别是php.webserver.web browser,可以通过程序代码或配置文件做到实时输出,相对而言后台是可控的,但是前台不同浏览器缓冲机制是不同的,这里没有深入研究.我的解决方案是,允许非实时输出. 允许非实时输出的一个要求是,在

jquery实现弹出层效果实例_jquery

本文实例讲述了jquery实现弹出层效果的方法.分享给大家供大家参考.具体实现方法如下: <head runat="server"> <title>jQuery弹出层</title> <script type="text/javascript" src="js/jquery-1.3.2-min.js"></script> <script type="text/javasc

九种js弹出对话框的方法总结_javascript技巧

[1.最基本的js弹出对话框窗口代码] 这是最基本的js弹出对话框,其实代码就几句非常简单: 复制代码 代码如下: <script LANGUAGE="javascript"> <!-- window.open ("page.html") --> </script> 因为这是一段javascripts代码,所以它们应该放在<script LANGUAGE="javascript">标签和</s

JavaScript中的三种弹出对话框

        学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性更精彩,实际上我们经常会在进行网页浏览时简单这种类型的对话框,在用户与应用程序进行双向交流时,经常要用到对话框.avascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prompt()来获得,可以利用这些对话框来完成js的输入和输出,实现