Avatar billede hulla Novice
07. november 2007 - 13:54 Der er 24 kommentarer og
2 løsninger

AJAX Updatepanels reload

Hej

Jeg kunne godt tænke mig at have mit updatepanel til at reloade hver gang siden loades. På den måde kan jeg styre fra serveren hvornår siden skal opdateres.

Jeg har prøvet med forskellige triggers og noget javascript direkte i koden. Begge dele vil kun give mig et enkelt reload, og ikke efterfølgende blive ved.

Nogen der ved noget om hvordan jeg løser det?

:-)
Avatar billede f3rn Nybegynder
07. november 2007 - 14:32 #1
Hej. Prøv eventuelt at kigge dette eksempel igennem:
http://www.asp.net/AJAX/Documentation/Live/tutorials/IntroToTimerControl.aspx
Avatar billede hulla Novice
07. november 2007 - 14:50 #2
Njaa jeg har brugt mange timer sammen med timer kontrollen, jeg tror ikke den er den rigtige løsning. Den vil jo ikke vente på at jeg sender tilbage fra serveren, men fortsætter bare sit kald i det interval den er sat til. Vil gerne reloade hver gang siden er afleveret til serveren.
Avatar billede f3rn Nybegynder
07. november 2007 - 14:58 #3
Altså du vil kun reloade dit UpdatePanel såfremt en betingelse bliver opfyldt? Evt. en knap bliver trykket? Så kan du bruge triggers: http://asp.net/AJAX/Documentation/Live/tutorials/CreatingPageUpdatePanel.aspx
Avatar billede hulla Novice
07. november 2007 - 15:02 #4
Nej jeg har INGEN bruger interaktioner. Den skal reloade konstant,.. altså hver gang den er færdig loadet skal den sende en request til serveren igen.. På serveren har jeg selv styr på hvornår siden skal renderes og sendes tilbage til klienten.
Avatar billede hulla Novice
07. november 2007 - 15:04 #5
Det skal faktis være nøjagtig som en <body onload="window.location.reload()">
Det skal bare være ascynkront
Avatar billede f3rn Nybegynder
07. november 2007 - 15:18 #6
Så ser jeg ikke en grund til at en Timer ikke kan bruges. Du kan jo bare sætte den til at requeste en gang i sekundet. Du skal sende requests til serveren fra klienten for at få et svar.
Avatar billede neoman Novice
07. november 2007 - 15:24 #7
Jeg har en gang lavet noget fusk som følger:
1. Inde i markupen for updatepanelet har jeg en usynlig <img tag
2. en <img tag har et OnLoad event, som kalder noget js
3. mit js laver andre ting, men i dit tilfælde kunne scriptet klikke på en trigger for dit update panel.

Det kan garanteres laves mere "elegant" :)

En alternativ metode er at barbere lidt på denne kode, som jeg bruger til at skifte cursor til timeglas ved hver postback (synkron eller asynkron)
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest);

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);

        function beginRequest(sender, args) {
            document.body.style.cursor = 'wait';
        }
        function pageLoaded(sender, args) {
                    document.body.style.cursor = 'default';
        }

pageLoaded funktionen kunne klikke på en trigger til dit updatepanel.
Avatar billede hulla Novice
07. november 2007 - 16:48 #8
jaaaa det lyder mere rigtigt,.. men hvordan klikke på en trigger til mit updatepanel?
Avatar billede neoman Novice
07. november 2007 - 16:58 #9
function clickMyTrigger() {
        var myTrigger = document.getElementById("<%=btnMyTrigger.ClientID%>");
        myTrigger.click();
}

hvor du så har en serverkontrol som asp:button  som enten ligger inde i dit updatepanel, eller udenfor (og i dette fald er den sat som trigger for panelet). Knappen har så en stile="visibility:hidden;"  (altså ikke noget med at sætte btnMyTrigger.visible=false på selve knappen, for så bliver den ikke sendt til klienten). Nogle gange så skal man også sætte  btnMyTrigger.UseSubmitBehavior="False" - kan ikke huske hvorfor, men ellers virker det ikke altid.
Avatar billede neoman Novice
07. november 2007 - 18:04 #10
I øvrigt - hvad skal du bruge dette her til ? Det må give en grim belastning for serveren og trafikken, at hver klient bare står og konstant poster tilbage i en løkke.
Avatar billede hulla Novice
08. november 2007 - 09:06 #11
Der vil ikke komme nogen særlig belastning på serveren.
Returnering til klienten sker sjældent.
Det er i forbindelse med styring af eksterne forbindelser, som intet har med siden at gøre, men hentes med webservices.

Selve problemet er: "Hvordan kan jeg fyre en hvilken som helst event af HVER gang siden loades?" Jeg har forsøgt med <body onload="alert();">, Page.ClientScript.RegisterStartupScript og at indsætte javascriptet direkte på siden. Når opdatering sker med AJAX afvikles ingen af de nævnte mere end 1 gang.

Kan det overhovedet lade sig gøre?
Avatar billede neoman Novice
08. november 2007 - 09:18 #12
Har du prøvet noget af det jeg skrev ? I så fald hvad og hvordan?
Avatar billede hulla Novice
08. november 2007 - 09:23 #13
Jeg har prøvet det hele.. og det hele virker sådan set. Bare kun 1 gang. Hvor skal jeg kalde triggeren så den fyres af  hver gang? UDEN brugerinteraktioner. Det er meget nemt at få det hele til at virke uden brug af AJAX. Men skal have fundet en event der fyres af hver gang et updatepanel loades på siden. Det gør body onload ikke, og heller ikke window.onload
Avatar billede neoman Novice
08. november 2007 - 11:00 #14
Dette her virker : husk at indbygge et eller andet stop, ellers sidder den i en uendelig løkke:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="TestReload.aspx.vb" Inherits="TestReload" %>

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    Namespace="System.Web.UI" TagPrefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
   
</head>
<body>
          <form id="form1" runat="server">
<script type="text/javascript">

function clickMyTrigger() {
        var myTrigger = document.getElementById("<%=Button1.ClientID%>");
        myTrigger.click();
}

</script> 

    <div>
        <asp:TextBox ID="TextBox1" runat="server">1</asp:TextBox>
   
    </div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
           
<asp:TextBox ID="TextBox2" runat="server">1</asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" /><img src="Img/arrow.gif"  onload="clickMyTrigger();"/>
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>
Avatar billede neoman Novice
08. november 2007 - 11:02 #15
og pageload:
Partial Class TestReload
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        TextBox1.Text = CInt(TextBox1.Text) + 1
        TextBox2.Text = CInt(TextBox2.Text) + 1

    End Sub
End Class

bare så man kan se det funker
Avatar billede hulla Novice
08. november 2007 - 12:44 #16
njaaa det virker vist ikke... den skal jo fortsætte med at tælle op uden at røre knappen. den  her tæller jo kun op når hele siden loades...
Avatar billede hulla Novice
08. november 2007 - 12:45 #17
dit img onload event bliver jo ikke kørt bare fordi dit updatepanel opdateres.
Det det  her handler om, er at finde et event som fyres af når et DOM element ændres. Ikke noget med load eftersom load ikke kører igennem AJAX
Avatar billede neoman Novice
08. november 2007 - 12:46 #18
ok så forstår jeg ikke hvad det er du vil - jeg rører ingen knap, den bliver trykket på af koden. Eller er det fordi du tror, at pageload ikke køres når en updatepanel trigges ?
Avatar billede hulla Novice
08. november 2007 - 12:51 #19
nej nej, normalt kan jeg sætte et breakpoint serverside og se den kommer derind.
Nu har jeg forsøgt at køre koden nøjagtig som du har postet det, men så mangler du en scriptmanager....
Avatar billede neoman Novice
08. november 2007 - 12:51 #20
opgaven gik udpå at have en updatepanel som opdaterede sig selv det øjeblik den var loaded, og gjorde det igen og igen uden bruger interaktion. Det gør min kode so mjeg har kørt for at teset. Hvis du søger noget andet så kan jeg ikke hjælpe dig.
Avatar billede hulla Novice
08. november 2007 - 12:53 #21
jeg søger ikke noget andet,... jeg får aldrig andet end et 2 tal i min textbox,.. og den burde vel så tælle op hele tiden?
Avatar billede neoman Novice
08. november 2007 - 12:58 #22
hos mig tæller den hele tiden indtil jeg dræber browseren
Avatar billede neoman Novice
08. november 2007 - 12:59 #23
nu får du hele koden so mden kører lige nu:
Partial Class TestReload
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        TextBox1.Text = CInt(TextBox1.Text) + 1
        TextBox2.Text = CInt(TextBox2.Text) + 1

    End Sub
End Class

og
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="TestReload.aspx.vb" Inherits="TestReload" %>

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    Namespace="System.Web.UI" TagPrefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
   
</head>
<body>
          <form id="form1" runat="server">
<script type="text/javascript">

function clickMyTrigger() {
        var myTrigger = document.getElementById("<%=Button1.ClientID%>");
        myTrigger.click();
}

</script> 

    <div>
        <asp:TextBox ID="TextBox1" runat="server">1</asp:TextBox>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
   
    </div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
           
<asp:TextBox ID="TextBox2" runat="server">1</asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" /><img src="Img/arrow.gif"  onload="clickMyTrigger();"/>
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>
Avatar billede neoman Novice
08. november 2007 - 13:00 #24
og du har vel udskifet "Img/arrow.gif"  til et eller andet lille billede du selv har ?
Avatar billede hulla Novice
08. november 2007 - 13:16 #25
For fanden da osse ja,.. du er dog fantastisk,.. det virker jo..
Det var vist det med at et image har bedst af at kunne finde det billede den bliver bedt om.

Mange tak for hjælpen,... :-)
Avatar billede hulla Novice
08. november 2007 - 13:20 #26
hov nu røg pointene til en forkert,.. hvordan kan jeg give dig point? nyt spørgsmål?
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