2010-12-08 39 views
0

頁後:防止回傳打開jQuery的對話框

<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"; 
} 

這段代碼打開我確定和取消對話框按鈕,但它不會等待用戶ac並立即張貼頁面,標籤被填充。我需要根據用戶活動調用c#函數。如果用戶點擊「確定」標籤應該填充,如果用戶點擊「取消」,它不應該調用c#函數。我如何實現這一目標?

回答

0

增加了一個按鈕,使用jQuery的點擊()事件來觸發新的按鈕的點擊事件,這將反過來觸發相應的事件處理程序在C#

3

首先,要阻止該網頁,立即回發到服務器,你需要從你的處理程序返回false取消click事件的默認行爲:

<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()Ø f控件(ASP.NET中的UniqueID術語)。由於該按鈕是<form>元素的直接子元素,因此我們可以在__doPostBack()調用中對其id進行硬編碼,但如果它駐留在容器層次結構中,情況會變得更加複雜。在這種情況下,您可以使用ClientScript.GetPostBackEventReference()生成對__doPostBack()的適當呼叫。

編輯:由於您的頁面不包含任何啓用回發功能的控件,因此__doPostBack()將不會在客戶端定義。要解決該問題,您可以使用LinkButton控件而不是Button控件。

+0

__doPostBack(「btnClick」,「」);沒有調用我的c#函數 – 2010-12-08 07:53:44