Hallo Leute.
Wieder einmal ein Problem, welches weder bei google noch hier zu finden war, wobei ich mir nicht vorstellen kann, daß so was einfaches nur mich betrifft.
Also ganz easy:
Ich habe einen Button mit dem ein Datensatz gelöscht wird.
Klickt der User darauf, soll per Javascript eine Nachfrage kommen, ob wirklich gelöscht werden soll.
<asp:ImageButton ID="BtnDelete" runat=server ImageUrl="~/images/basic/delete_1_32.png" onmouseout="src='../images/basic/delete_1_32.png'" onmouseover="src='../images/basic/delete_1_32_hover.png'" OnClick="BtnDelete_Click" />
füge ich hier nun ein onclientclick ein, darin eine Javascript Funktion und gleich danach
return false; dann wird die Javascript Funktion ausgelöst und de Postback nicht.
<asp:ImageButton ID="BtnDelete" runat=server ImageUrl="~/images/basic/delete_1_32.png" onmouseout="src='../images/basic/delete_1_32.png'" onmouseover="src='../images/basic/delete_1_32_hover.png'" OnClientClick="ConfirmDialog.Open();return false;" OnClick="BtnDelete_Click" />
Lasse ich das
return false; weg, dann wird die Javascript Funktion ausgeführt und gleich darauf der Postback.
Also so bringt das nichts.
Lagere ich das ConfirmDialog.Open(); in eine Javascript Funktion aus, und darin (je nach Klick auf ok oder cancel) return false; dann wird der Postback ausgelöst.
Ich benötige also eine Lösung mit der ich bei Klick eine Javascript Funktion ausführen kann und darin, je nach Gegebenheit, den Postback ausführe oder nicht.
Von der Funktion her ein ganz normaler Confirm Dialog....
wie macht man sowas?
hallo,
das problem ist, dass
return false;
immer nach dem dialog ausgeführt wird. damit wird der status des events quasi auf erledigt gesetzt und dein postback nicht mehr ausgeführt. die anweisung darf also nur bedingt ausgeführt werden, nämlich beim klick auf "nein"...
edit: kannst du nicht in deinem ConfirmDialog.Open() ein flag / hiddenfield setzen und das dann im onclientclick auswerten??? weil wenn du das "return false" in der open-methode ausführst, springt er ja nur aus dieser zurück in den clientseitigen eventhandler von deinem button und führt danach den postback aus...
mfg hurby
Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.
Also das Problem ist halt, daß er den Postback ausführt, wenn ich nicht im onclientclick das return false reinsetze.
Irgendwo eine Funktion aufrufen und darin return false, je nach angeklicktem Button funtioniert halt nicht, es sei denn, es handelt sich um einen Standard-Confirm Dialog.
Also das Problem ist halt, daß er den Postback ausführt, wenn ich nicht im onclientclick das return false reinsetze.
richtig, wenn du es aber reinschreibst wird es nie ausgeführt...
Irgendwo eine Funktion aufrufen und darin return false, je nach angeklicktem Button funtioniert halt nicht,
richtig, weil er dann ja nur aus der funktion zurück zur aufrufenden springt...
es handelt sich um einen Standard-Confirm Dialog.
das weiss ich nicht so genau...
merk dir doch einfach in deinem confirmdialog welche antwort der user gab, diese wertest du dann im onclientclick aus. hat er nein angeklickt führst du "return false" aus und alles ist takko...
edit: wobei du denn den serverseitigen eventhandler asynchron aufrufen müsstest...
mfg hurby
Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.
Hi und vielen Dank mal.
Ich habs nun mit dem ConfirmExtender von asp.net ajax gelöst.
grüße schuppsl
Hallo,
um die Eingangsfrage nochmal zu beantworten:
mit der Rückgabe von false im OnClientClick von Buttons kann gesteuert werden, ob anschließend der Postback ausgeführt wird. Wenn das vom Bestätigungsdialog abhängen soll, muss natürlich das Ergebnis des Dialogs zurückgegeben werden.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo,
Wenn das vom Bestätigungsdialog abhängen soll, muss natürlich das Ergebnis des Dialogs zurückgegeben werden.Gruß, MarsStein
Soweit klar, aber ich muss das alles im OnClientClick Ereignis direkt abwickeln, also wenn ich darin eine Funktion aufrufe und aus der Funktion das Ergebnis zurückliefere funktioniert es nicht...dann wird der Postback ausgelöst.
Also eingentlich nichts anderes als der ModalPopUpExtender des AjaxControlToolkits. Der hat nähmlich Ok und Cancel.
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Hallo,
Wenn das vom Bestätigungsdialog abhängen soll, muss natürlich das Ergebnis des Dialogs zurückgegeben werden.Gruß, MarsStein
Soweit klar, aber ich muss das alles im OnClientClick Ereignis direkt abwickeln, also wenn ich darin eine Funktion aufrufe und aus der Funktion das Ergebnis zurückliefere funktioniert es nicht...dann wird der Postback ausgelöst.
Schreib Dir einfach eine Methode, die Du aufrufst, die einen Boolean zurückliefert:
<asp:ImageButton [...] OnClientClick="return HandleConfirmDialog();" OnClick="BtnDelete_Click" />
<script type="text/javascript">
function HandleConfirmDialog() {
if( /* Logik */)
return false;
return true;
}
</script>
Ich hab den Code jetzt nicht getestet, aber meines Verständnisses nach, müsste erst der JS-Code ausgewertet werden und dann, je nachdem ob true oder false zurückkommt, der PostBack und somit das OnClick-Event ausgelöst werden.
Eben genau das ist nicht der Fall!
Habe das so ja schon versucht, aber es wird immer der Postback ausgelöst wenn ich die Programmlogik in eine Funktion auslagere...
Mach es doch so:
1.) Wenn OK geklickt wird, dann geht ein asynchroner Call an die Codebehind
2.) In der codebehind wird gewerkelt
3.) Wenn alles i.O ist hat jede PageMethod einen onSucced und einen onError Handler (Funktion) in welchen Du reagieren kannst
4.) Wenn alles i.O. ist und ein Postback geschehen soll, kann Du den PageRequestManager anweisen einen Postback zu machen.
5.) Versehe alle Buttons mit einem
return false;
Nachfolgend mache ich in etwa was ähnlliches.
//Function to to printermodel change when in the appropriate
//modalpopupextender the ok button was clicked
function OnReplacePrinterModel(args) {
var gridView = document.getElementById(args.split('/')[0]);
var netBiosName = args.split('/')[1];
var selectedRow = null;
var hiddenField = null;
for (var index = 0; index <= gridView.rows.length; index++) {
if (gridView.rows[index] != null) {
if (gridView.rows[index].style.backgroundColor.search('#ffffcf') != -1) {
selectedRow = gridView.rows[index];
break;
}
}
}
hiddenField = $('input', selectedRow);
var articleId = hiddenField[0].value;
PageMethods.ReplacePrinterModel(netBiosName, articleId, OnSuccededReplacePrinterModel, OnErrorReplacePrinterModel);
ShowPopUp('ProgressModalPopUpExtender');
}
function OnSuccededReplacePrinterModel(result, usercontext, methodname) {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm._doPostBack();
}
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt