![](/img/trans.png)
[英]How to show a pop-up dialog through ASP.NET and get the value of the pop up back
[英]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')"/>
好,給您一些注意事項:
無論哪種情況,都需要回發。
您的<asp:Button>
將自動執行回發,所以您無需調用__doPoskBack();
在這種情況下。
這里的主要問題是,如果要回發,它將在函數退出時立即發生,實際上過早地取消了打印對話框。 為避免這種情況,我們將使用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.