Avatar billede cdull Nybegynder
07. marts 2007 - 16:14 Der er 15 kommentarer og
1 løsning

Kør javascript når usercontrol loades.

Jeg vil gerne have at en bestemt javascript funktion skal køres når jeg dynamisk loader min usercontrol.

Det område hvor usercontrollen loades, er pakket ind i et updatepanel, og opdateres med AJAX, og jeg ved ikke om det har nogen indflydelse.

jeg har prøvet at lave en <asp:literal> og give den en javascript tekst, som beskrevet i dette indlæg http://www.eksperten.dk/spm/415241
men det virker ikke, udover at det bliver skrevet ud på skærmen.


Hvordan kan jeg få det til at spille.
Avatar billede kalp Novice
07. marts 2007 - 16:25 #1
hmm.. og hvorfor skrev du ikke bare videre til den gut som prøvede at hjælpe dig? kunne være han havde andre forslag;)

men i din ASPX side skal du skrive..


          <%if (IsPostBack)
                { %>

<script  language="javascript">       
alert('Besked til bruger.');
</script>

                <%           
                }
                %>


og hvis det ikke virker så er det fordi du ikke laver postback, men redirekter!
Avatar billede snepnet Nybegynder
07. marts 2007 - 16:49 #2
if(!IsPostback)
{
  ClientScript.RegisterStartupScript(this.GetType(), "someKey", "alert('blah');", true);
}

Mvh
Avatar billede cdull Nybegynder
07. marts 2007 - 17:01 #3
Ingen succes overhovedet. Ingen af svarene hjælper mig, så mit problem ligger måske andetsteds.
Jeg har selv brugt ClientScript.RegisterStartupScript() til noget javascript jeg har i main siden. Men så snar jeg prøver at benytte dette her i usercontrols, virker det ikke.

Jeg ryger ned i en postback, har checket med breakpoints.
Men der sker bare intet med det javascript.

Qawi-> Jeg tror du har misforstået mig. Spørgsmålet jeg linker til er ikke et jeg selv har oprettet, men hvor jeg har søgt.
Og spørgsmålet datere helt tilbage til 2003.
Avatar billede cdull Nybegynder
07. marts 2007 - 17:02 #4
Jeg har prøvet de to muligheder i usercontrolens inline, og i dens pageload.
Avatar billede cdull Nybegynder
07. marts 2007 - 17:33 #5
Jeg er kommet lidt videre.
Har skabt et nyt projekt hvor jeg prøver at finde fejlen.

Loader jeg usercontrollen i min main sides pageload, virker javascript perfekt i usercontrollen.
Men så snart jeg loader min usercontrol når jeg bruger AJAX, virker det ikke.

Nogle ideer?
Avatar billede snepnet Nybegynder
07. marts 2007 - 17:36 #6
Hvis det skal være helt rigtigt - skal koden nok også se sådan her ud (fuldt eksempel):
public partial class WebUserControl1 : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "someKey", "alert('blah');", true);
        }
    }
}

Det burde virke helt uden problemer, såfremt din usercontrol er indsat deklarativt på siden.

Mvh
Avatar billede snepnet Nybegynder
07. marts 2007 - 17:37 #7
Hov - havde ikke set din kommentar fra 17:33.
Kan du vise os hvordan du loader den (når det ikke virker).
Mvh
Avatar billede cdull Nybegynder
07. marts 2007 - 17:47 #8
Jeg loader på præcist samme måde. herunder kan jeg lige vise nogle forskellige ting fra når det ikke virker..

DEFAULT.ASPX.CS - AJAXTest_Command køres ud fra en trigger i DEFAULT.ASPX.

public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
     

        }
        protected void AJAXTest_Command(Object sender, CommandEventArgs cmd)
        {
            switch (Convert.ToInt16(cmd.CommandArgument))
            {
                case 0:
                    test1 test = (test1)LoadControl("test1.ascx");
                    UCContainer.Controls.Add(test);
                    break;
            }

            Panel.UpdateMode = UpdatePanelUpdateMode.Conditional;
            Panel.Update();
        }
    }


DEFAULT.ASPX - Her er AJAX delen defineret.

<asp:ScriptManager ID="ScriptManager1" runat="server" />


<asp:LinkButton ID="test" runat="server" CommandArgument="0" CommandName="test" OnCommand="AJAXTest_Command">click me</asp:LinkButton>

<asp:UpdatePanel ID="Panel" runat="server">


<ContentTemplate>

<asp:PlaceHolder ID="UCContainer" runat="server" />

</ContentTemplate>

<Triggers>
<asp:AsyncPostBackTrigger ControlID="test" EventName="Click" />

</Triggers>
</asp:UpdatePanel>

TEST1.ASCX - min usercontrol, som i inline kun har en testtekst.

protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "someKey", "alert('blah');", true);
}
}
Avatar billede cdull Nybegynder
07. marts 2007 - 17:51 #9
Når det virker ser DEFAULT.ASPX.CS sådan her ud.

protected void Page_Load(object sender, EventArgs e)
{
test1 test = (test1)LoadControl("test1.ascx");
UCContainer.Controls.Add(test);
}

Og der er ingen AJAX tingeltangel med. Usercontrollen ser ens ud, bortset fra at det nu er (!Page.IsPostBack) da AJAX ikke længere skaber en postback og jeg loader controllen i pageload ved første sidevisning..
Avatar billede snepnet Nybegynder
08. marts 2007 - 07:36 #10
Altså - er det udelukkende første gang kontrollen bliver vist at du skal køre dit javascript?
Eller er det hver gang den loades at det skal vises?
Mvh
Avatar billede cdull Nybegynder
08. marts 2007 - 11:37 #11
Det er hver gang.

skal lave noget javascript logik i en usercontrol, a.la et galleri.
Og der skal de nødvendige javascript funktioner være til at opdatere diverse document. controls på usercontrolen.
Avatar billede snepnet Nybegynder
08. marts 2007 - 13:11 #12
Hvis det er hver gang skal du bare få dropppet forespørgslen på IsPostBack - så skulle du meget gerne få fyret det af hver gang.
Mvh
Avatar billede cdull Nybegynder
08. marts 2007 - 16:09 #13
Om der er IsPostBack på eller ej, eller om den er true eller false gør ingen forskel.
Javascriptet kan ikke affyres.
Avatar billede snepnet Nybegynder
08. marts 2007 - 23:32 #14
Kan du zippe et eksempel og lægge til download - eller kan du skrive din messengerkonto her... Så tager jeg et kig på det.
Mvh
Avatar billede cdull Nybegynder
08. marts 2007 - 23:52 #15
Snepnet -> det behøves ikke. Jeg har fundet en løsning på det.
I var inde på noget af det rigtige. Til orientering af andre, var det ikke
ClientScript.RegisterStartupScript(this.GetType(), "someKey", "alert('blah');", true);
eller
Page.RegisterStartupScript(this.GetType(), "someKey", "alert('blah');", true);

Der skulle benyttes når man vil bruge javascript i usercontrols der loades med AJAX, MEN man skal bruge
ScriptManager.RegisterStartupScript(this.GetType(), "someKey", "alert('blah');", true);

Hvor scriptmanageren er ens AJAX manager.

Men mange tak for hjælpen. Snepnet, du har været utrolig hjælpsom, og dit råd fik mig på sporet af det her. Så smid et svar.
og endnu en gang tak.
Avatar billede snepnet Nybegynder
09. marts 2007 - 09:36 #16
Ahja ... klart :o)
Mvh
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