1

页:

<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# 函数。我如何实现这一目标?

4

2 回答 2

4

首先,为了防止页面立即回传到服务器,您需要通过从处理程序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()是控件的名称(它UniqueID在 ASP.NET 术语中)。由于按钮是元素的直接子<form>元素,我们可以id__doPostBack()调用中对其进行硬编码,但如果它驻留在容器层次结构中,事情会变得更加复杂。在这种情况下,您可以使用ClientScript.GetPostBackEventReference()生成对__doPostBack().

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

于 2010-12-08T07:47:24.933 回答
0

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

于 2010-12-11T08:16:20.893 回答