Avatar billede henrik_40 Juniormester
17. juni 2014 - 14:29 Der er 17 kommentarer og
1 løsning

værdi fra iframe til forældre til iframe

Jeg har følgende Parent:

Activity.aspx
<body style="border-right: medium none; border-top: medium none; margin: 5px; border-left: medium none;
    border-bottom: medium none" bgcolor="white" scroll="no">
    <form id="Activity" method="post" runat="server">

                        <MS:TabStrip ID="TabStripActivity" runat="server" EnableViewState="False" SepDefaultStyle="background-color:#FFFFFF;border-color:#AAAAAA;border-width:1px;border-style:solid;border-top:none;border-left:none;border-right:none;"
                            TabDefaultStyle="color:gray;background-color:#EEEEEE;border-color:#AAAAAA;border-width:1px;border-style:Solid;font-weight:bold;font-family:Tahoma;font-size:11px;height:21;text-align:center;padding-left:5;padding-right:5;"
                            TabHoverStyle="color:Black;background-color:#EEEEEE;" TabSelectedStyle="color:black;background-color:white;border-bottom-style:none;">
                            <MS:Tab Text="Oversigt"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Status"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Kunde"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Produkt"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Opgave"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Dok."></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Tilbud"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Reservedele"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Reparation"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Levering"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Faktura"></MS:Tab>
                            <MS:TabSeparator></MS:TabSeparator>
                            <MS:Tab Text="Links"></MS:Tab>
                        </MS:TabStrip>



                <MS:PAGEVIEW>
                    <!-- TILBUD -->
                    <div>
                        <iframe id="IframeQuote" frameborder="no" width="100%" height="100%" runat="server">
                        </iframe>
                    </div>
                </MS:PAGEVIEW>


                        <!-- REPAIR-->
                        <table cellspacing="0" cellpadding="0" border="0">
                            <tr>
                                <td valign="top">
                                    <span class="ActivityLabelMultiLine">Reparation</span>
                                </td>
                                <td valign="top">
                                    <asp:Label ID="LabelRepairDescription" runat="server" CssClass="ActivityDataMultiLine" />
                                    <asp:TextBox ID="TextBoxRepairDescription" runat="server" CssClass="ActivityTextBoxMultiLine"
                                        Rows="4" TextMode="MultiLine" /></td>










Fra IframeQoute hvor filen hedder Quote.aspx ønsker jeg at tilgå og sætte LabelRepairDescription, efter brugeren har aktiveret en dropdownbox:

        private void DropDownListTemplates_SelectedIndexChanged(object sender, System.EventArgs e)
        {


HER ØNSKER JEG AT SÆTTE PARENTS TextBoxRepairDescription.Text
            }

Håber I kan hjælpe...
Avatar billede keysersoze Guru
17. juni 2014 - 14:44 #1
Du er nødt til at benytte JavaScript hvis du vil kommunikere mellem (i)frames - og da du alligevel skal benyttes js er der umiddelbart ingen grund til at lave et postback. Sæt en onchange-event på din select og skriv noget a la

parent.document.getElementById('DitElementId').value = this.options[this.selectedIndex].value;
Avatar billede henrik_40 Juniormester
17. juni 2014 - 15:01 #2
Jeg er ikke så stiv i javascript. Har forsøgt at lave en testknap:
    <script type="text/javascript">
        function TextToFrame() {
            alert(parent.document.getElementById('LabelRepairDescription').value);
            return false; // stop postback
        }
    </script>

  <asp:LinkButton ID="test" runat="server" OnClientClick="TextToFrame()">KAJ</asp:LinkButton>


Jeg får ikke værdien af labelen.

Jeg har også forsøgt at skrive:

    <script type="text/javascript">
        function TextToFrame() {
            alert(parent.document.getElementById('LabelRepairDescription').value);
            parent.document.getElementById('').value = 'testing testing hej kaj';
            return false; // stop postback
        }
    </script>

ligeledes uden held.
Avatar billede henrik_40 Juniormester
17. juni 2014 - 15:04 #3
Der skulle have stået ved sidste forsøg: parent.document.getElementById('LabelRepairDescription').value = 'testing testing hej kaj';
Avatar billede henrik_40 Juniormester
17. juni 2014 - 15:21 #4
Her fik jeg teksten fra parent:
alert(parent.document.getElementById('LabelRepairDescription').innerHTML);

Nu skal jeg blot have sat værdien.
Avatar billede henrik_40 Juniormester
17. juni 2014 - 15:28 #5
men følgende virker IKKE:
parent.document.getElementById('LabelRepairDescription').value = 'hej kaj';
Avatar billede keysersoze Guru
17. juni 2014 - 15:35 #6
Hvis det er en div eller lignende kan du benytte innerHTML i stedet for value.
Avatar billede henrik_40 Juniormester
17. juni 2014 - 15:41 #7
keysersoze ->

Følgende virker med min testknap:
parent.document.getElementById('LabelRepairDescription').innerHTML = "jfewofijwiof";

men hvordan gør jeg det når dropdownen bliver ændret?
jeg forstår ikke hvad du mener med:
"Sæt en onchange-event på din select "

Kan du forklare mig det nærmere?
Avatar billede henrik_40 Juniormester
17. juni 2014 - 16:00 #8
Jeg skal vel køre et javascript fra code behind? But how?
Avatar billede henrik_40 Juniormester
17. juni 2014 - 16:20 #9
Inspireret af denne tråd, fandt jeg løsningen:
http://www.eksperten.dk/spm/804530

I min
        private void DropDownListTemplates_SelectedIndexChanged(object sender, System.EventArgs e)

Har jeg skrevet følgende, som virker:
            string test= "hej med dig";
            this.RegisterStartupScript("runscript", @"<script> parent.document.getElementById('LabelRepairDescription').innerHTML = '"+test+"';</script>");


Jeg vil dog stadig gerne høre hvad det var som du rådede mig til :-) .. min min løsning er mindre god..
Avatar billede keysersoze Guru
17. juni 2014 - 16:36 #10
nej - JavaScript er et klientsprog og skal køres på en onchange på dit element. Som nævnt vil det være dumt at køre en postback kun pga det.

eks

DropDownListTemplates.attributes.add("onchange", "parent.document.getElementById('LabelRepairDescription').innerHTML = 'hej'");
Avatar billede henrik_40 Juniormester
17. juni 2014 - 16:54 #11
ahh, nu er jeg med. Jeg bliver nødt til at have postback da den gør meget andet: Udfylder GRID og textboxe.

Men uanset hvad har jeg fået et nyt problem. Scriptet kager i det pgr.a strengen:

JavaScript critical error at line 138, column 183 in http://localhost:1234/csm/activity/Quote.aspx?QuoteID=20398\n\nSCRIPT1015: Strengkonstanten er uafsluttet

her er lidt af strengen:
'Enhed efterset for forsikringen. Anmeldte skade verificeret. Iht forsikringens ønske er XXXX udskiftet  HER KAGER DEN
Det

jeg tror det må være p.gr.a. ENTER. Kan jeg gøre noget her (evt. i databasen)?
Avatar billede henrik_40 Juniormester
17. juni 2014 - 17:06 #12
Det må være ENTER, for flg. gav samme fejl:
<script> parent.document.getElementById('LabelRepairDescription').innerHTML = 'simpel tekst
simpel 2
';</script>



Unterminated string constant
Avatar billede henrik_40 Juniormester
17. juni 2014 - 17:31 #13
reptext = reptext.Replace("\r\n", "<br />");
var løsningen. Carriage Return udskiftet med html br. Ved ikke om der kommer andre overraskelser..
Avatar billede keysersoze Guru
18. juni 2014 - 09:24 #14
Du vil formentlig også få fejl hvis der indgår en ' i teksten - det kan du escape med \'
Avatar billede henrik_40 Juniormester
18. juni 2014 - 10:07 #15
Keysersoze ->
Ja  det var det jeg tænkte. Er der ikke en slags funktion der kan lave escape characters om til html.. eller er der en anden måde at løse problemet på?
Avatar billede keysersoze Guru
18. juni 2014 - 10:52 #16
Der er en HtmlEncode - men det er nok ikke hvad du ønsker. Dels fordi den jo ikke hvad at teksten skal benyttes i en javascript-context hvilket er hvor det går galt med ' og dels et linjeskift jo lige så vel kunne være et <p></p> fremfor <br /> så tranformeringen ville ikke være perfekt.

replace linjeskift og escape ' så bør du være dækket rimeligt ind - er du "bange" for hvad teksten ellers kan indeholde så kør en htmlencode som det første.
Avatar billede henrik_40 Juniormester
19. juni 2014 - 10:04 #17
ok tak til jer begge :-)

Problemet må siges at være løst. I har begge hjulpet mig og jeg har selv hjulpet til ;)

Jeg ved ikke hvordan jeg skal give point her...
Avatar billede keysersoze Guru
19. juni 2014 - 10:08 #18
begge to?
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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



IT-JOB