簡體   English   中英

彈出不去發布在asp.net

[英]pop up does not go for post back in asp.net

我有一個名為sales的按鈕,當我單擊cancel it backback並插入表單中的值時,它有一個JavaScript彈出窗口,但是當我單擊ok時,它不會回發,並且表單中的值也不會進入數據庫( JavaScript按鈕實際上是打印調用,並且當單擊該按鈕時,它會在打開打印對話框時要求打印,它不會回發並且數據庫中未插入數據)

這是JavaScript代碼

function confirmAction(printable) {
    var r = confirm("You want to Print Invoice?");
    if (r == true) {
        var printContents = document.getElementById(printable).innerHTML;
        var originalContents = document.body.innerHTML;

        document.body.innerHTML = printContents;

        window.print();

        document.body.innerHTML = originalContents;

        __doPostBack();
    }
    else {
        __doPostBack();
    }
}

這是按鈕單擊的代碼

 <asp:Button ID="btnaddsale" runat="server" Text="Sale" OnClick="btnaddsale_Click"  OnClientClick="javascript:confirmAction('printable')"/>

好,給您一些注意事項:

  1. 無論哪種情況,都需要回發。

  2. 您的<asp:Button>將自動執行回發,所以您無需調用__doPoskBack(); 在這種情況下。

  3. 這里的主要問題是,如果要回發,它將在函數退出時立即發生,實際上過早地取消了打印對話框。 為避免這種情況,我們將使用JavaScript技巧來檢查document是否具有focus ,並且只有當document具有focus時(當用戶在瀏覽器中退出打印對話框時),我們才會返回並允許回發。


要解決此問題,

第一:使函數return true; 當用戶取消時,等待focus ,然后如果用戶要打印,則return true

function confirmAction(printable) {
    var r = confirm("You want to Print Invoice?");
    if (r == true) {
        var printContents = document.getElementById(printable).innerHTML;
        var originalContents = document.body.innerHTML;

        document.body.innerHTML = printContents;

        window.print();

        document.body.innerHTML = originalContents;

        // Check focus after user exits print dialog and then return true for the postback
        var document_focus = false;
        $(document).focus(function () { document_focus = true; });
        setInterval(function () { if (document_focus === true) { return true; } }, 500);
    }
    else {
        return true;
    }
}

然后,更改JavaScript代碼以在OnClientClick事件中使用return語句:

<asp:Button ID="btnaddsale" runat="server" Text="Sale" 
    OnClick="btnaddsale_Click"  
    OnClientClick="javascript:return confirmAction('printable')"/>

根據評論和您更改的要求進行更新:

這是使腳本在回發后彈出的摘要。 因此,您將向數據庫中插入值,然后使用Page.ClientScript.RegisterStartupScript()在頁面加載時添加打印腳本/確認對話框。

注意,我不建議將該腳本嵌入到您的C#代碼中,因此,建議您使用您的confirmAction()函數並將其(如果尚未放置)放入單獨的“ yourScripts.js ”文件中,然后調用該函數使用jQuery加載頁面時的名稱。 這是一個例子:

在您的母版頁或頁眉中:此文件應包含confirmAction()函數

<script type="text/javascript src="path/to/yourScriptsFile.js">

然后,在代碼背后:

protected void Page_Load(object sender, EventArgs e)
{
    // Only display script on PostBack, not initial page load
    if (IsPostBack)
    {
        Page.ClientScript.RegisterStartupScript(
            this.GetType(), 
            "confirmAction", 
            @"<script type=""Text/Javascript"">$(document).ready(function() { confirmAction('printable'); });</script>");
    }
}

還要注意,由於您現在不希望回發,所以confirmAction函數不應再return true; 或使用我在上面發布的技巧代碼,只會return false

function confirmAction(printable) {
    var r = confirm("You want to Print Invoice?");
    if (r == true) {
        var printContents = document.getElementById(printable).innerHTML;
        var originalContents = document.body.innerHTML;

        document.body.innerHTML = printContents;

        window.print();

        document.body.innerHTML = originalContents;
    }
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM