2010-01-27 43 views
4

我正在尋找一種方法將在JQuery對話框中捕獲的信息提交給ASP.Net中的服務器。我原本以爲它會與一個'隱藏'的ASP按鈕,但點擊似乎並沒有提交表單。下面的代碼我到目前爲止:如何使用JQuery.UI對話框和ASP.Net提交給服務器?

<script type="text/javascript"> 
    jQuery(document).ready(function() { 

    var dlg = jQuery("#dialog").dialog({ 
      bgiframe: true, 
      autoOpen: false, 
      height: 150, 
      width: 300, 
      modal: true, 
      buttons: { 
      "Add": function() { 
        var btn = document.getElementById("<%=btnAdd.ClientID %>"); 
        if (btn) btn.click(); 
        $(this).dialog("close"); 
       } 
      } 
     }); 

     $("#dialog").parent().appendTo("#dialog_target"); 

    }); 
</script> 

<div id="hidden" style="visibility:hidden" > 

    <!-- Hidden button that actually triggers server add --> 
<asp:Button ID="btnAdd" 
      runat="server" 
      style="display:none" 
      OnClick="btnAdd_Click" /> 

<!-- Hidden Delete Dialog --> 
<div id="dialog" title="New Additional Skill"> 
     <label>Additional Skill Name:</label> 
     <asp:TextBox ID="_txtNewSkillName" runat="server" /> 
</div> 

任何指針?

回答

0

將表單添加到對話框中,然後在關閉對話框或單擊按鈕時使用JavaScript提交表單。

0

我不確定,但在FireFox表單中用display:裝飾的元素:none不會包含在服務器的POST數據中。所以我認爲你的表單提交,但ASP.NET不會執行你的服務器端btnAdd_Click函數,因爲它無法在POST數據中找到按鈕。

嘗試改變顯示:無以

visibility:hidden; 

position:absolute; 
top:-999px; 
0

使用ClientScript.GetPostBackEventReference,而不是建立到btn.click()呼叫:

buttons: { 
    "Add": function() { 
     <%= ClientScript.GetPostBackEventReference(
       new PostBackOptions(this.btnAdd))%>; 
    } 
} 
+0

哎呦 - 固定一個錯字。我直接從我的測試文件中複製了這個,並且使用了我的Button的變量名稱而不是你的名字。 d: – 2010-02-17 21:00:14

0

試試這個:

__doPostBack('btnAdd','OnClick');

這將模擬一個按鈕單擊事件,它會回發到服務器。在頁面加載事件中使用此設置參考:

Page.GetPostBackEventReference(btnAdd)

希望這有助於。

3

您隱藏的按鈕方式很好,但您提交時仍然可能不在<form>之內。

要解決這個問題,只需將對話框放置在<form>之內,確保它提交...否則您點擊的按鈕不在POST設置到服務器,並且事件不會觸發。

你會做到這一點通過調整.appendTo()調用,就像這樣:

$("#dialog").parent().appendTo("form"); 

既然你只處理1 <form>,這是所有你需要:)

相關問題