2012-08-25 75 views
0

在我的代碼背後的文件我打電話一個HTML模式彈出窗口提示用戶輸入用戶名和密碼。 我想在繼續之前從調用函數的背後得到一個結果。 我該怎麼做?現在顯示的模式形式和C#代碼繼續處理,這是有道理的,但它不是我想要的。 注:莫代爾簽收HTML模式窗體上有一個按鈕(btnSignoff)調用後面的函數一些其他的代碼 感謝 達摩顯示模式彈出式登錄後等待用戶響應

後面的代碼:

SignoffModal.Show(); 
//Wait for response (this is what i would like to be able to do) 
if (result <0) 
{ 
//throw some error 
} 

else 
{ 
// Do some more work 
} 

HTML代碼:

<!-- Signoff Modal Form --> 
       <asp:HiddenField ID="SignoffForModal" runat="server" /> 
       <ajaxToolkit:ModalPopupExtender runat="server" ID="SignoffModal" BehaviorID="modalPopupExtenderSignoff" 
        TargetControlID="SignoffForModal" PopupControlID="popUpPaneSignoff" OkControlID="btnSignoff" 
        BackgroundCssClass="modalBackground"> 
       </ajaxToolkit:ModalPopupExtender> 
       <asp:Panel ID="popUpPaneSignoff" runat="server" CssClass="confirm-dialog"> 
        <asp:Label ID="lblUsername" runat="server" Text="Username"></asp:Label> 
        <br /> 
        <asp:TextBox ID="txtUserName" runat="server" ToolTip="Username" Width="200px"></asp:TextBox> 
        <br /> 
        <asp:Label ID="lblPassword" runat="server" Text="Password"></asp:Label> 
        <br /> 
        <asp:TextBox ID="txtPassword" runat="server" ToolTip="Password" TextMode="Password" 
         Width="200px"></asp:TextBox> 
        <br /> 
        <br /> 
        <div class="base"> 
         <asp:Button ID="btnSignoff" runat="server" Text="Signoff" /> 
         <asp:LinkButton ID="LinkButton3" runat="server" CssClass="close" OnClientClick="$find('modalPopupExtenderSignoff').hide(); return false;" /></div> 
       </asp:Panel> 
       <!-- End Signoff Modal Form --> 

回答

1

看起來像ModalPopupExtender不是這樣設計的。雖然它是模態(阻止用戶與頁面的其餘部分進行交互),但它不是阻止,意味着代碼在窗體被調用後繼續運行。這是因爲彈出窗口在客戶端上運行,並且代碼隱藏運行服務器。這稱爲callback,因爲客戶端代碼在執行操作時將回叫給服務器。

爲了使這項工作,你必須通過ModalPopupExtender添加CancelControlID屬性指向一個處理取消操作的按鈕SignoffModal.Show();後拆分邏輯中的「確定」部分和「取消」的一部分,再加入按鈕:

<!-- Signoff Modal Form --> 
<asp:HiddenField ID="SignoffForModal" runat="server" /> 
<ajaxToolkit:ModalPopupExtender runat="server" ID="SignoffModal" 
    BehaviorID="modalPopupExtenderSignoff" 
    TargetControlID="SignoffForModal" 
    PopupControlID="popUpPaneSignoff"  
    OkControlID="btnSignoff" 
// points to cancel button action 
    CancelControlID="btnCancel" 
BackgroundCssClass="modalBackground"> 

...

<asp:Button ID="btnSignoff" runat="server" Text="Signoff" /> 
    // handles Cancel action... 
    <asp:Button ID="btnCancel" runat="server" Text="Cancel" /> 
    ... 
<!-- End Signoff Modal Form --> 

btnSignoff代碼隱藏事件處理程序:

{ 
// Do some work... 
btnCancel代碼隱藏事件處理程序

{ 
//throw some error... 
+0

嗨,所以基本上你說:這是不可能的,並且我一直在使用背後btnsignoff代碼來繼續處理。我可以做到這一點,但像id簽名模式+其代碼背後可重用的其他情況下,我想用戶名和密碼簽字。這是正確的,你說的是什麼? – user1438082

+0

您仍然可以使代碼可重用,這只是您必須按照ModalPopupExtender預期的方式連接代碼。這意味着有一個代碼塊用於確定,另一個用於取消。只需爲每個函數製作函數,然後在其他應用程序中調用按鈕甚至處理函數中的函數。 –

+0

我最終將會話變量設置爲第一個函數的值。然後我檢查會話變量設置爲什麼,並在調用第二個函數時通過switch語句列表執行所需的函數。 – user1438082