Laden...

onclientclick + onclick= Confirm Dialog?

Erstellt von schuppsl vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.745 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren
onclientclick + onclick= Confirm Dialog?

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?

H
222 Beiträge seit 2010
vor 13 Jahren

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.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

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.

H
222 Beiträge seit 2010
vor 13 Jahren

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.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Hi und vielen Dank mal.
Ich habs nun mit dem ConfirmExtender von asp.net ajax gelöst.
grüße schuppsl

3.170 Beiträge seit 2006
vor 13 Jahren

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

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

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.

1.433 Beiträge seit 2006
vor 13 Jahren

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

P
120 Beiträge seit 2008
vor 13 Jahren

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.

  • Philipp
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

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...

1.433 Beiträge seit 2006
vor 13 Jahren

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