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.




Dialog aus Webpart schließen

Geprüfte Antwort Dieser Beitrag hat 22 Antworten

Ohne Rang
255 Beiträge
stephan12345 erstellt 4 Juli 2011 18:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich habe einen selbstgeschriebenen Webpart in einer eigenen ASPX Seite gehostet:

<WebPartPages:SPUserCodeWebPart runat="server" Description="Admin" Title="Admin" AssemblyFullName="$SharePoint.Project.AssemblyFullName$" SolutionId="473f9e55-bf55-4283-a9ce-3de0b05650f7" ID="adminwp"
TypeFullName="SBAppPage.AdminWebPart.AdminWebPart" > WebPartPages:SPUserCodeWebPart>



Wenn ich in meinem Webpart einen Button mit Codebehind
einbaue kann dieser nicht den Dialog schließen.



Die ASPX Seite öffne ich als Dialog über das Dialog Framework mit


javascript:OpenPopUpPageWithTitle('{SiteUrl}/AdminPage/AdminPage.aspx

 

 

 

',RefreshOnDialogClose, 640, 400, 'Titel');

 

 

 

 Habe schon alles mögliche probiert:

private void Cancel_Click(object sender, EventArgs e){

HttpContext.Current.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");

HttpContext.Current.Response.Flush();

HttpContext.Current.Response.End();

}

Das endet aber alles in Fehlermeldungen.

Ich brauche irgendeinen Mechanismuss, um den hostenden Dialog über den Webpart

schließen zu können denke ich.

 

Bin für jede Hilfe dankbar.

Stephan

 

 

 

 

 Habe schon alles mögliche probiert:

private void Cancel_Click(object sender, EventArgs e){

HttpContext.Current.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");

HttpContext.Current.Response.Flush();

HttpContext.Current.Response.End();

}

Das endet aber alles in Fehlermeldungen.

Ich brauche irgendeinen Mechanismuss, um den hostenden Dialog über den Webpart

schließen zu können denke ich.

 

Bin für jede Hilfe dankbar.

Stephan

 

 

 

 Habe schon alles mögliche probiert:

private void Cancel_Click(object sender, EventArgs e){

HttpContext.Current.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");

HttpContext.Current.Response.Flush();

HttpContext.Current.Response.End();

}

Das endet aber alles in Fehlermeldungen.

Ich brauche irgendeinen Mechanismuss, um den hostenden Dialog über den Webpart

schließen zu können denke ich.

 

Bin für jede Hilfe dankbar.

Stephan

 

 


                                

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Juli 2011 08:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="stephan12345"]HttpContext.Current.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");[/quote]

Das funktioniert bei mir (gefolgt von einem Response.End(); )

Allerdings öffne ich die Dialoge immer mit
SP.UI.ModalDialog.showModalDialog(options);

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 09:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ich habe jetzt herausgefunden, dass ich die Dialoge, die ich mit "OpenPopUpPageWithTitle" öffne mit "cancelPopUp()" oder "commutPopup" wieder schließen kann.

Das witzige ist aber, vielleicht hast Du da eine Idee, Variante 1 funktioniert, Variante 2 aber nicht. die Exception kommt jedesmal beim Response.End.

Grüße aus dem Nachbarort ;-)
Stephan

 

Variante 1:

Button btnCancel = new Button();
btnCancel.Text = "Cancel";
btnCancel.Attributes.Add("OnClick", "window.frameElement.cancelPopUp(); return false;");
Controls.Add(btnCancel);


Variante 2:

Button btnCancel = new Button();
btnCancel.Text = "Cancel";
btnCancel.Click += new EventHandler(Cancel_Click);
Controls.Add(btnCancel);


private void Cancel_Click(object sender, EventArgs e){
   this.Context.Response.Write("<script type='text/javascript'>window.frameElement.cancelPopUp(); return false;</script>");
   this.Context.Response.Flush();
   this.Context.Response.End();     
}

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 09:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

 javascript:OpenPopUpPageWithTitle('{SiteUrl}/AdminPage/AdminPage.aspx',
              RefreshOnDialogClose, 640, 400, 'AdminPage');

Hat den Vorteil, dass nach dem Schließen des Dialogs die Seite darunter neu geladen wird "RefreshOnDialogClose".
Das kann ShowModalDialog glaube ich nicht.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Juli 2011 11:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Doch, das geht mit ShowModalDialog auch, aber man muß die Callbackfunktion in den Options angeben (dort kann man auch noch viel mehr angeben).

Zu der Exception von oben: ist das eine .NET-ThreadAbortException? Die wird in SharePoint oft von Response.End ausgelöst. Kannst Du einfach mit try ... catch fangen und ignorieren.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 12:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi,

ne klappt leider auch nicht. Es fliegt zwar keine Exception mehr, aber der Dialog geht auch nicht zu.

Wie gesagt, die Buttons befinden sich innerhalb eines Webparts, der auf sich auf einer ASPX Seite befindet.
Diese wird im Dialog angezeigt.
Die oben beschrieben Variante 1 funktioniert für den Cancel Button.
Beim Submit Button brauche ich aber einen Schließen nach der Abarbeitung meines Codes und nda fliegt er mir beim Response.End weg.

Grüße
Stephan

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Juli 2011 12:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nochmal die Frage: ist das Problem im .NET-Code oder clientseitig im JavaScript?

Falls .NET: welche Exception und wie lauten die Details? Kannst Du das nicht wie oben beschrieben abfangen?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 12:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

 

Ist ne NullReferenceException was das End auslöst.

System.NullReferenceException: Object reference not set to an instance of an object. at System.Web.HttpResponse.End() at SandboxedApplication.AdminWebPart.AdminWebPart.Cancel_Click(Object sender, EventArgs e) -->

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Juli 2011 12:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Aaah, hast Du mal getestet, ob HttpResponse überhaupt gesetzt ist? Ich benutze immer this.Page.Response

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 12:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das Webpart wird auf der ASPX Seite so deklariert:

 <WebPartPages:SPUserCodeWebPart
    runat="server"
    Description="Admin"
    Title="Admin"
    AssemblyFullName="$SharePoint.Project.AssemblyFullName$"
    SolutionId="fd9701f3-fa31-4348-b60c-d4854483dd46"
    ID="adminwp"    
    TypeFullName="SandboxedApplication.AdminWebPart.AdminWebPart" >
 </WebPartPages:SPUserCodeWebPart>         

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Juli 2011 13:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das hat mit meiner letzten Anmerkung aber nichts zu tun... ;-)

Prüfe doch einfach im Debugger ob Context.Response überhaupt belegt ist und versuche es sonst mit Page.Response.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 13:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

War auch nur als Hilfe gedacht, vielleicht hättest Du da noch eine andere Idee gehabt.

 

Die Page ist laut Debugger da. Nur im Feld Headers steht ein Error:

base {System.NotSupportedException} = {"This operation requires IIS integrated pipeline mode."}

Ansonsten beim Aufruf von End gleicher Fehler:

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Juli 2011 13:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Was willst Du denn mit den Headers? Du brauchst doch Page.Response

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 13:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Brauche ich auch nicht, das ist mir nur beim Debuggen vom Response Object aufgefallen.

Irgendwo im End() passiert eine NullReferenceException, aber wie kann man jetzt herausbekommen warum ?

Gruß und Danke

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 13:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Mein Code läuft ja in SPUCWorkerProcess.exe weil es eine Sandboxed Solution ist.

Kann das evtl. damit zusammenhängen ?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Juli 2011 14:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Glaube ich nicht. Wirklich herausfinden kannst das aber nur Du selbst durch intensives Debugging (Exception fangen, StackTrace anschauen, Logs durchsuchen, usw.). Bei mir hat das oben beschriebene Vorgehen jedenfalls immer funktioniert.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
4 Beiträge
Andreas Baur Als Antwort am 5 Juli 2011 14:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich hatte auch schon solche Fehler gehabt und konnte diese auch immer mit einem Page.Response lösen.

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 15:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hab nochmal im MS Forum nachgefragt und folgende Antwort bekommen:

Hi,

It is a limitation in Sandboxed solution. Refer here : http://www.wictorwilen.se/Post/Understanding-the-SharePoint-2010-Sandbox-limitations.aspx

Regards

Ranga


Regards Ranga www.sharepointfrontier.com
Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Juli 2011 16:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Na sowas, man lernt doch nie aus. Aber wenn Wictor das schreibt, wird es wohl stimmen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 5 Juli 2011 18:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

und der muss es ja wohl wissen als master ;-)

wann gehen wir ein bierchen trinken, hab ich dir ja versprochen.

Komm ich einfach rüber gefahren.

Gruß und schönen Abend

Stephan

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 6 Juli 2011 08:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Morgen (Do. 7.7.) trifft sich die UG Stuttgart. Du kannst gerne kommen :-)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 6 Juli 2011 09:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ja hab ich schon gesehen. Ich würde auch gerne kommen, bin morgen aber leider nicht in Stuttgart.

Gruß
Stephan

 

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 28 Sept. 2011 14:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Inspiriert durch einen aktuellen Beitrag mit Andi

konnte ich das Problem jetzt durch ein Literal-Control lösen.

Coole Sache, danke Andi

Auf der Webseite ein Literal anlegen und im CodeBehind folgendes aufrufen:

Literal1.Text = @"<script type='text/javascript'>window.frameElement.commitPopup();</script>";

schließt dann den Dialog auch in einer SandBoxed Solution.