SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




OpenPopUpPageWithTitle aus CodeBehind heraus

Geprüfte Antwort Dieser Beitrag hat 11 Antworten

Ohne Rang
255 Beiträge
stephan12345 erstellt 28 Nov. 2011 16:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich würde gerne aus meinem Webpart heraus einen Dialog über das Dialogframework öffnen.
Dazu habe ich in meinem CodeBehind in einem ButtonEventHandler folgenden Code:

Literal1.Text = @"<script type='text/javascript'>OpenPopUpPageWithTitle('http://server/Sites/Site-Dev/TestPage/TestPage.aspx?IsDlg=1', RefreshOnDialogClose, 750, 370, 'TestPage');</script>";

Benutze ich die Methode in einem CustomAction Element funktionier es einwandfrei.
Über das Literal1.Text jedoch kommt es im IE zu folgendem Fehler:

Errors on this webpage might cause it to work incorrectly:
'RefreshOnDialogClose' is undefined.

Leider verstehe ich nicht wo da das Problem liegt.

Danke und Grüße
Stephan

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 28 Nov. 2011 18:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich nehme an, daß die JS-Datei, in der diese Funktion definiert ist, in diesem Zusammenhang fehlt. Frag mich aber nicht, wo die herkommt.

In jedem Fall kannst Du aber auch mit SP.UI.ModalDialog.showModalDialog(options) arbeiten.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 29 Nov. 2011 11:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ja diese Lösung funktioniert auch. Ich müsste aber auch hier die Seite nach dem Schließen des Dialoges neu laden.

Das geht leider noch nicht.

Gruß und Danke
Stephan

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Nov. 2011 11:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Was ist denn RefreshOnDialogClose? Eine boolsche Variable? Oder eine function()? Wie auch immer: Du kannst einfach Deine eigene Callback-Funktion bereitstellen und dort dann einen Refresh machen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 29 Nov. 2011 11:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist ein Parameter vom Framework, der eigentlich bewirkt, dass die Seite nach dem Schließen neu aufgebaut wird.
In einer CustomAction funktioniert das auch super, nur nicht über das Literal.

 

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 29 Nov. 2011 11:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok, hab diese gegen einen eigenen callback ausgetauscht, der auch aufgerufen wird.

Was muss da jetzt in JavaScript am besten rein um den Refresh auszulösen ?

 

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 29 Nov. 2011 11:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

RefreshPage(1)

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 29 Nov. 2011 12:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Alles klar, jetzt passt alles.

Vielen Dank für die Hilfe.

Gruß
Stephan

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 29 Nov. 2011 13:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Der ordnung halber hier noch einmal der funktionierte Code:

Literal1.Text = @"<script type='text/javascript'>
             ExecuteOrDelayUntilScriptLoaded(
                function(){
                    function dialogCallbackMethod() {
                        RefreshPage(1);
                }
             OpenPopUpPageWithTitle(''http://server/Sites/Site-Dev/TestPage/TestPage.aspx?IsDlg=1'', dialogCallbackMethod, 750, 370, 'Meta-Daten bearbeiten');
                },
                'sp.js');
                </script>";

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 29 Nov. 2011 09:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="stephan12345"]Literal1.Text = @"<script type='text/javascript'>OpenPopUpPageWithTitle('http://server/Sites/Site-Dev/TestPage/TestPage.aspx?IsDlg=1', RefreshOnDialogClose, 750, 370, 'TestPage');</script>";[/quote]

Dieser Code wird beim Darstellen / Aufbauen der Seite sofort ausgeführt hier kann es passieren das die benötigten JS Dateien noch nicht komplett geladen wurden. Du könntest über Page.ClientScriptManager.RegisterClientScriptBlock dein JS ausführen lassen oder ExecuteOrDelayUntilScriptLoaded benutzen.

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 29 Nov. 2011 11:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Thomas,
mit ExeciteOrDelayUntilScriptLoaded funktioniert es tatsächlich.
Das einzige Problem das ich habe ist, dass die darunterliegende Seite nicht aktualisiert wird, nachdem der Dialog beendet wurde,
obowjl RefresOnDialogClose gesetzt ist.

Danke und Gruß
Stephan

 

  Literal1.Text = @"<script type='text/javascript'>
             ExecuteOrDelayUntilScriptLoaded(
                function(){
                    OpenPopUpPageWithTitle('http://server/Sites/Site-Dev/TestPage/TestPage.aspx?IsDlg=1', RefreshOnDialogClose, 750, 370, 'TestPage', RefreshOnDialogClose, 750, 370, 'Meta-Daten bearbeiten');},
                    'sp.js');
                </script>"; 

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 29 Nov. 2011 11:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wird beim Schließen des Dialogs SP.UI.DialogResult.OK (1)  zurück gegeben?

window.frameElement.commitPopup();

[quote user="stephan12345"] OpenPopUpPageWithTitle('http://server/Sites/Site-Dev/TestPage/TestPage.aspx?IsDlg=1', RefreshOnDialogClose, 750, 370, 'TestPage', RefreshOnDialogClose, 750, 370, 'Meta-Daten bearbeiten');}, [/quote]

Du kannst auf IsDlg verzichten da dies von Client Methode automatisch gesetzt wird.