![](/img/trans.png)
[英]asp.net c# from server side lauch popup and wait for response before executing next line
[英]Wait popup response before C# function
我正在尝试通过弹出窗口调用JavaScript函数,如果用户单击“确定”,它将调用C#函数。 但是页面总是在我加载JavaScript函数的同时回发。
我的HTML ASP:Button:
<asp:Button ID="PrchBtn" runat="server" class="PrchBtn" Text="<%$ Resources:Resource, WebEDI_Save %>" OnClick="PrchBtn_Click" OnClientClick = "Confirm();" />
OnClientClick,它调用此JS函数:
function Confirm() {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
alertify.confirm('<%= GetGlobalResourceObject("Resource","WebEDI_PDF_MsgBox") %>', function (e) {
if (e) {
confirm_value.value = "Yes";
} else {
confirm_value.value = "No";
}
document.forms[0].appendChild(confirm_value);
});
}
然后我的C#函数:
public void PrchBtn_Click(object sender, EventArgs e)
{
//Code here...
}
它与一个简单的“确认”对话框一起工作。 但是我想自定义弹出窗口,这就是为什么我使用“ Alertify”库的原因。
谢谢你的帮助。
更新(请参阅注释3):通过单击此链接( 从JavaScript调用函数背后的代码(不是AJAX!) )这是我的实际代码:
<asp:Button ID="PrchBtn" runat="server" class="PrchBtn" Text="<%$ Resources:Resource, WebEDI_Save %>" OnClientClick="Confirm(); return false;" />
<asp:Button runat="server" ID="PrchBtnHidden" ClientIDMode="Static" OnClick="PrchBtn_Click" style="display:none;" />
function Confirm() {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
alertify.confirm('<%= GetGlobalResourceObject("Resource","WebEDI_PDF_MsgBox") %>', function (e) {
if (e) {
confirm_value.value = "Yes";
document.forms[0].appendChild(confirm_value);
__doPostBack('<%= PrchBtnHidden.UniqueID %>');
} else {
confirm_value.value = "No";
document.forms[0].appendChild(confirm_value);
__doPostBack('<%= PrchBtnHidden.UniqueID %>');
}
});
}
但是问题是一样的,JS和C#同时做事。
更新(奖励错误):我不知道为什么,但是我的alertify被错误了。 在提示下:
alertify.prompt("Message", function (e, str) {
// str is the input text
if (e) {
Console.Log("Ok");
} else {
Console.Log("No");
}
}, "Default Value");
当我单击“确定”或“否”时,没有任何反应。 提示的TextBox内容为:
函数(e,str){// str是输入文本,如果(e){Console.Log(“ Ok”); } else {Console.Log(“ No”); }}
并带有Alertify.Confirm
alertify.confirm('<%= GetGlobalResourceObject("Resource","WebEDI_PDF_MsgBox") %>', function (e) {
if (e) {
confirm_value.value = "Yes";
document.forms[0].appendChild(confirm_value);
__doPostBack('<%= PrchBtnHidden.UniqueID %>');
} else {
confirm_value.value = "No";
document.forms[0].appendChild(confirm_value);
__doPostBack('<%= PrchBtnHidden.UniqueID %>');
}
});
仅触发“确定”。 取消按钮不会显示。
解决方案:使用了另一个alertify.js( http://alertifyjs.com/ ),这是我的JS函数:
alertify.confirm('<%= GetGlobalResourceObject("Resource","WebEDI_PDF_MsgBox") %>', function () {
confirm_value.value = "Yes";
document.forms[0].appendChild(confirm_value);
__doPostBack('<%= PrchBtnHidden.UniqueID %>');
},
function () {
confirm_value.value = "No";
document.forms[0].appendChild(confirm_value);
__doPostBack('<%= PrchBtnHidden.UniqueID %>');
}).set('labels', { ok: 'Ok', cancel: 'No' });
而且有效!
解决方案:创建2个HTML按钮,其中一个可见链接到JavaScript函数,另一个不可见链接到C#方法:
<asp:Button ID="PrchBtn" runat="server" class="PrchBtn" Text="<%$ Resources:Resource, WebEDI_Save %>" OnClientClick="Confirm(); return false;" />
<asp:Button runat="server" ID="PrchBtnHidden" ClientIDMode="Static" OnClick="PrchBtn_Click" style="display:none;" />
JS:
function Confirm() {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
alertify.confirm('<%= GetGlobalResourceObject("Resource","WebEDI_PDF_MsgBox") %>', function () {
confirm_value.value = "Yes";
document.forms[0].appendChild(confirm_value);
__doPostBack('<%= PrchBtnHidden.UniqueID %>');
},
function () {
confirm_value.value = "No";
document.forms[0].appendChild(confirm_value);
__doPostBack('<%= PrchBtnHidden.UniqueID %>');
}).set('labels', { ok: 'Ok', cancel: 'No' });
}
当您单击第一个按钮时,它将调用JS。 然后,JS将调用第二个按钮的PostBack。 而且我在Alertify方面遇到问题,因此我使用了另一个来源: http ://alertifyjs.com/
您可以触发对隐藏按钮的单击,您可以在其中的后面的代码上附加单击处理程序。
服务器:
protected void Page_Load(object sender, EventArgs e)
{
PrchBtnHiddenNo.Click += PrchBtnHiddenNo_Click;
PrchBtnHiddenYes.Click += PrchBtnHiddenYes_Click;
}
void PrchBtnHiddenYes_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
void PrchBtnHiddenNo_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
客户:
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<script src="Scripts/alertify.js"></script>
<link href="Content/alertify.default.css" rel="stylesheet" />
<link href="Content/alertify.core.css" rel="stylesheet" />
<hgroup class="title">
<h1>Test alertify</h1>
</hgroup>
<asp:Button ID="PrchBtn" runat="server" class="PrchBtn" Text="Click Here" OnClientClick="Confirm(); return false;" />
<asp:Button runat="server" ID="PrchBtnHiddenYes" ClientIDMode="Static" Style="display: none;" />
<asp:Button runat="server" ID="PrchBtnHiddenNo" ClientIDMode="Static" Style="display: none;" />
<script>
function Confirm() {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
alertify.confirm('Do it', function (e) {
if (e) {
$('#PrchBtnHiddenYes').click();
confirm_value.value = "Yes";
} else {
$('#PrchBtnHiddenNo').click();
confirm_value.value = "No";
}
});
}
</script>
</asp:Content>
JS源和CSS从以下位置下载: http : //fabien-d.github.io/alertify.js/
重要说明:如果您尝试触发单击文件上传输入,请输入IE痛处,不要让您这样做。
您可以使用纯Java脚本而不使用jquery:
document.getElementById("PrchBtnHiddenYes").click();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.