Я пытаюсь вызвать функцию JavaScript с помощью всплывающего окна, и если пользователь нажимает «ОК», он вызывает функцию С#. Но страница всегда выполняет обратную передачу в то же время, когда я загружаю функцию JavaScript.
Мой HTML ASP:Кнопка:
<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);
});
}
И затем моя функция С#:
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.prompt("Message", function (e, str) {
// str is the input text
if (e) {
Console.Log("Ok");
} else {
Console.Log("No");
}
}, "Default Value");
Когда я нажимаю «ОК» или «Нет», ничего не срабатывает. И содержимое TextBox подсказки:
function (e, str) { // str - это входной текст if (e) { Console.Log("Ok"); } else { Console.Log("Нет"); } }
И с помощью 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' });
И это работает!
Confirm()
не будет знать в конце своего выполнения, следует ли отменить обратную передачу или нет, вам нужно будет предотвратить обратную передачу там, а затем вручную запустить обратную передачу в обработчике событий для вашегоalertify
. Или на вашем месте я бы воспользовался возможностью, чтобы исключить обратную передачу и заменить ее вызовом AJAX для Веб-API. - person mason   schedule 16.03.2015return false;
из вашейConfirm()
функции, чтобы предотвратить обратную передачу после завершения этой функции. - person mason   schedule 16.03.2015alertify.confirm
. Попробуйте использоватьalertify.prompt
, как описано здесь (обратите внимание на разные аргументы). - person mason   schedule 16.03.2015alertify
. Возможно, вы захотите поэкспериментировать с ним. - person mason   schedule 16.03.2015