Avatar billede brian0905 Nybegynder
06. august 2005 - 10:40 Der er 8 kommentarer og
1 løsning

Kommunikere mellem to vinduer

Hej,

Jeg har en side der viser en liste af brugere. Når brugeren trykker på en knap popper der en ny dialog op (window.showModalDialog...) her indtaster brugeren så de informationer der skal til for at lave en ny bruger og trykker ok. Ved tryk på ok knappen skal siden selv eller den side der åbnede den (det er lige meget) sætte dataene ind i en database og samtidig lukke vinduet og derefter opdatere listen af brugere på den oprindelige side. Problemet er at det er ASP.NET og indsæt er lavet server side, så jeg kan ikke lukke vinduet efter jeg har sat data ind i min database.

1. Kan jeg efter at have indtastet data i min html formular  tilgå disse tekster når jeg trykker ok, fra den anden side af? (dvs. den side der åbner min modal dialog skal hive informationerne ud fra det andet window).

2. Hvordan sætter jeg variable i et andet window?

3. Hvordan kalder jeg en function der findes i et andet window?
Avatar billede jonashn Nybegynder
06. august 2005 - 18:17 #1
Jeg tror nok det er parent.variabel og parent.funktion.
Parent.etellerandet svarer altså til etellerandet, kørt fra det vindue der oprettede popup'en.
Avatar billede olebole Juniormester
06. august 2005 - 22:16 #2
<ole>

Der er vist flere spørgsmål i den smøre  :)
I andet argument i showModalDialog kan du altid sende en variabel, et array, eller et objekt med op i modaldialogen. I dialogen ligger disse data efterfølgende i window.dialogArguments. Objektet, du medsender, kunne godt være selve window-objektet:
  var dialog = showModalDialog("myPage.html", window, "... osv, osv ...")

I dialogen kan du så referere til en funktion i det oprindelige vindue med:
  window.dialogArguments.myNiftyLittleFunc();

Jeg tror ikke, du får brug for det her, men så ved du det  :)

En modalDialog er normalt ikke navigabel, men vi kan lave et lille indisk cowboy-trick. skriv noget à la dette i modal-dokumentet:

<form action="page.aspx" method="post" target="loadFR">
    <input type="text" name="gnu"><br>
    <button type="submit"></button>
</form>

<iframe name="loadFR" src="about:blank" style="display:none"></iframe>

- så fyres formen af mod iframen, der loader dit .net-dokument.
I dette dokument indsætter du i databasen og skriver til sidst (argumenterne skriver du ud med .net):

    <script type="text/JavaScript">parent.myClose("bla", "blabla", "noget tredie")</script>

- der kalder en funktion i modal-dokumentet, der f.eks. kunne se sådan ud:

function myClose() {
    window.returnValue = arguments;
    window.close();
}

I den funktion, du oprindelig åbnede modal-dialogen med, kan du nu hente variablerne fra funktions-kaldet i iframe'en på denne måde:

function openMyModal() {
  var dialog = showModalDialog("myPage.html", ......);
  alert("Første argument: " + dialog[0]);
  alert("Andet argument: " + dialog[1]);
  alert("Tredie argument: " + dialog[2]);
}

/mvh
</bole>
Avatar billede olebole Juniormester
06. august 2005 - 22:19 #3
- hvilket vil give en fejl, hvis brugeren bare lukker modal-dialogen, uden at indsætte  :)
Dette er bedre:

function openMyModal() {
  var dialog = false;
  dialog = showModalDialog("myPage.html", ......);
  if (dialog) {
      alert("Første argument: " + dialog[0]);
      alert("Andet argument: " + dialog[1]);
      alert("Tredie argument: " + dialog[2]);
  }
}
Avatar billede brian0905 Nybegynder
09. august 2005 - 09:10 #4
Jeg har lvet følgende:

Den side der laver popup har denne metode:

function CreateNewPage()
    {
        var oWindow = window.showModalDialog("NewEditPage.aspx","New Page","dialogHeight: 250px; dialogWidth: 400px; center: Yes; help: No; resizable: No; status: No;");
        if(oWindow)
        {
          alert(oWindow[0]);
        }
    }

Det her er den side der bliver åbnet i ShowModal:

<%@ Page language="c#" Codebehind="NewEditPage.aspx.cs" AutoEventWireup="false" Inherits="CMS.NewEditSite" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>Create New Page</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <link href="Styles/Page.css" type="text/css" rel="stylesheet">
        <script language="javascript">
        function myClose()
        {
          window.returnValue = arguments;
          window.close();
        }
        </script>
    </HEAD>
    <body bgcolor="#ece9d8">
        <form id="Form1" method="post" runat="server">
            <TABLE id="sitetable" cellSpacing="1" cellPadding="1" width="100%" border="0">
                <TR>
                    <TD colspan="3"><h1>Create new page</h1>
                    </TD>
                </TR>
                <TR>
                    <TD class="text" style="WIDTH: 124px">Page&nbsp;name</TD>
                    <TD>
                        <asp:TextBox id="namebox" runat="server" Width="100%" CssClass="text"></asp:TextBox></TD>
                </TR>
                <TR>
                    <TD class="text" style="WIDTH: 124px; HEIGHT: 19px" valign="top">Page&nbsp;description</TD>
                    <TD>
                        <asp:TextBox id="descbox" runat="server" Width="100%" CssClass="text" TextMode="MultiLine" Rows="5"></asp:TextBox></TD>
                </TR>
                <tr>
                    <td>&nbsp;</td>
                    <td>
                        <asp:Button id="Button1" runat="server" CssClass="text" Text="Create"></asp:Button>
                        <asp:Button id="Button2" runat="server" CssClass="text" Text="Cancel"></asp:Button></td>
                </tr>
            </TABLE>
        </form>
    </body>
</HTML>


Det der sker, er at når jeg trykker på min "Create" knap så sker der det mystiske at min dialog ikke lukker, men dialogsiden bliver åbnet i et nyt browervindue oven på de andre i fuld størrelse(noget der ligner 1024*768)... skulle dette ikke være tilstrækkeligt? Og hvorfor skulle jeg omkring det indiske Combow trick med iframen for at gøre dette? det er vel ikke nødvendigt (jeg bruger AJAX til at indsætte i min database fra mit javascript, så jeg behøver ikke en side til at gøre det i)
Avatar billede brian0905 Nybegynder
09. august 2005 - 09:12 #5
Her er server side koden til Create knappen:

Response.Write("<script language='javascript'>parent.myClose('hest', 'pingvin');</script>");
Avatar billede brian0905 Nybegynder
09. august 2005 - 09:13 #6
Dette virker heller ikke (uden parent reference):
Response.Write("<script language='javascript'>myClose('hest', 'pingvin');</script>");
Avatar billede brian0905 Nybegynder
09. august 2005 - 09:29 #7
Rent faktisk kommer jeg aldrik ind i myClose funktionen, kan bare ikke gennemskue hvorfor jeg ikke gør det...
Avatar billede brian0905 Nybegynder
09. august 2005 - 09:38 #8
Nu virker det.... skiftede mine irriterende server side knapper ud med html knapper...

Tak for hjælpen :-) Det er vist det man kalder for bamse effekten...

tak for dit svar, gider du ikke lige smide et svar så du kan få dine velfortjente points.
Avatar billede brian0905 Nybegynder
27. oktober 2005 - 15:07 #9
Lukker tråden, ingen respons
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester