打开jQuery对话框后阻止回发

时间:2010-12-08 07:38:52

标签: c# asp.net postback jquery-dialog

页:

<body>
 <form id="frmLogin" runat="server">  
  <asp:Button ID="btnClick" OnClientClick="openConfirmDialog();" OnClick="PopulateLabel"  runat="server"/>
  <div id="divDialog"></div>
  <asp:Label ID="lblText" runat="server"></asp:Label>
 </form>
</body>

JS

<script type="text/javascript">
 $(document).ready(function() {
 $("#divDialog").dialog({autoOpen: false,
                     buttons: { "Ok": function()
                                      { 
                                         $(this).dialog("close");
                                      },
                                "Cancel": function()
                                      { 
                                          $(this).dialog("close");
                                      }
                              } 
                   });
 });

 function openConfirmDialog()
 {
  $("#divDialog").dialog("open");
 }

C#

protected void Page_Load(object sender, EventArgs e)
 {
    lblText.Text = "";
 }

protected void PopulateLabel(object sender, EventArgs e)
 {
    lblText.Text = "Hello";
 }

此代码打开一个带有“确定”和“取消”按钮的对话框,但它不会等待用户活动并立即发布页面并填充标签。我需要根据用户活动调用c#函数。如果用户单击“确定”标签应填充,如果用户单击“取消”,则不应调用c#函数。我如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

首先,为防止页面立即回发到服务器,您需要通过从处理程序返回click来取消false事件的默认行为:

<asp:Button ID="btnClick" runat="server" OnClick="PopulateLabel"
    OnClientClick="openConfirmDialog(); return false;" />

接下来,您需要在点击Ok按钮时自行执行回发:

$("#divDialog").dialog({
    autoOpen: false,
    buttons: {
        "Ok": function() { 
            $(this).dialog("close");
            __doPostBack("btnClick", "");
        },
        "Cancel": function() { 
            $(this).dialog("close");
        }
    }
});

请注意,__doPostBack()的第一个参数是控件的 name (ASP.NET术语中的UniqueID)。由于该按钮是<form>元素的直接子元素,因此我们可以在id调用中对其__doPostBack()进行硬编码,但如果它位于容器层次结构中,则会变得更复杂。在这种情况下,您可以使用ClientScript.GetPostBackEventReference()生成对__doPostBack()的适当调用。

编辑:由于您的网页不包含任何启用回发的控件,因此不会在客户端定义__doPostBack()。要解决该问题,您可以使用LinkButton控件而不是Button控件。

答案 1 :(得分:0)

添加了另一个按钮,并使用jQuery click()事件触发新按钮的click事件,该事件将依次触发C#中的相应事件处理程序