Glengamoi · AspHeute (Artikel) · .NET Heute (RSS-Suche) · .NET Blogs · Glengamoi Suche (Installieren via Klick)

Glengamoi

Die Diskussionsforen der deutschen .NET Community
Willkommen bei Glengamoi. Anmeldung | Registrieren | Hilfe
in Suchen

MS AJAX - Daten async an den Server senden

Letzter Beitrag 01-11-2007 9:38 von Chris Cluss. 23 Antworten.
Seite 1 von 2 (24 Treffer) 1 2 > Weiter
Beiträge sortieren: Zurück Weiter
  • 12-13-2006 6:39

    MS AJAX - Daten async an den Server senden

    Hallo!

     Ich habe eine Testbox am Client die ich beim Verlassen des Textfeldes gerne automatisch an den Client senden möchte. (Also die Änderung)

    Geht das mit MS Ajax? Gibts ein Beispiel? Hab soetwas bis jetzt nur selbst gecodet gehabt und würds aber auch gern mit MS AJAX machen.

     Ein volles Postback des Updatepanels ist NICHT gewünscht. (es sind viele Textboxen die immer aktuell sein sollten am Server beim Verlassen)

    Abgelegt unter: ,
    • IP-Adresse ist Registriert
  • 12-13-2006 7:16 Antwort zu

    AW: MS AJAX - Daten async an den Server senden

    jupp...

    http://ajax.asp.net/docs/tutorials/ConsumingWebServicesWithAJAXTutorial.aspx

    Damit kannst Du dann mit kleinen Javascripts sehr leicht mit dem Server Daten austauschen

    im Scriptmanager die Webmethod registrieren

                <asp:ScriptManager runat="server" ID="scriptManager1">
                    <Services>
                        <asp:ServiceReference Path="~/myService.asmx" />
                    </Services>
                </asp:ScriptManager>

    und dann in Javascript aufrufen

    <script type="text/javascript"> 

    myServiceNamespace.myFunction(myValue , onReadyStateChange)

    function onReadyStateChange(val){

    alert(val)

    }

    </script>

     

    Wobei Du auch eine WebMethod direkt in Deine ASPX einbauen kannst (mit Verweis im Scriptmanager):

    <System.Web.Services.WebMethod()> _
    Public Function Test(ByVal value As String) As String

              Return "hallo"

    End Function

    • IP-Adresse ist Registriert
  • 12-13-2006 7:29 Antwort zu

    AW: MS AJAX - Daten async an den Server senden

    Sounds nice :-)

     Danke werd ich dann gleich versuchen!

     

    • IP-Adresse ist Registriert
  • 12-13-2006 12:48 Antwort zu

    AW: MS AJAX - Daten async an den Server senden

    würde mich auch interessieren, wie man direkt funktionen aus der aspx-datei aufrufen kann...

    wie weiß ich denn, welcher namespace standardmäßig verwendet wird? bei mir steht im codebehind ja nur

    Partial Class verwaltung_filialen

    Inherits System.Web.UI.Page ...

     

    und muss ich bei master pages auch noch was zusätzlich beachten?

     

    gruß

     

    tom

    • IP-Adresse ist Registriert
  • 12-13-2006 15:09 Antwort zu

    AW: MS AJAX - Daten async an den Server senden

     5.1.2006 Link hinzugefügt: http://samples.pickupsite.eu/pagemethod/

    schwere Geburt bis ich das wieder rausgefunden habe ....

    Ich mache inzwischen doch alles mit Webservices.

    Der Aufruf geht dann über PageMethods.myFunction()

        <System.Web.Services.WebMethod()> _
         Public Shared Function HelloWorld() As String

            Return "HelloWorld!"

        End Function

    und im HTML:


                <script type="text/javascript">
                    function sayHello(){
                        PageMethods.HelloWorld(onReadyStateChange)
                    }
                   
                    function onReadyStateChange(val){
                        alert(val)
                   
                    }
                  
                </script>

    Der Scriptmanager kann auch in der Masterpage eingebunden werden.


            <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Services>
                    <asp:ServiceReference InlineScript="false" path="default.aspx" />
                </Services>
            </asp:ScriptManager>

    • IP-Adresse ist Registriert
  • 12-13-2006 17:34 Antwort zu

    Re: AW: MS AJAX - Daten async an den Server senden

    cool. danke für die mühe!
    ----- Original Message -----
    Sent: Wednesday, December 13, 2006 3:10 PM
    Subject: [Client] AW: MS AJAX - Daten async an den Server senden

    schwere Geburt bis ich das wieder rausgefunden habe ....

    Ich mache inzwischen doch alles mit Webservices.

    Der Aufruf geht dann über PageMethods.myFunction()

        <System.Web.Services.WebMethod()> _
         Public Shared Function HelloWorld() As String

            Return "HelloWorld!"

        End Function

    und im HTML:


                <script type="text/javascript">
                    function sayHello(){
                        PageMethods.HelloWorld(onReadyStateChange)
                    }
                   
                    function onReadyStateChange(val){
                        alert(val)
                   
                    }
                  
                </script>

    Der Scriptmanager kann auch in der Masterpage eingebunden werden.


            <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Services>
                    <asp:ServiceReference InlineScript="false" path="default.aspx" />
                </Services>
            </asp:ScriptManager>




    • IP-Adresse ist Nicht registriert
  • 12-13-2006 18:09 Antwort zu

    AW: Re: AW: MS AJAX - Daten async an den Server senden

    Also da wir schon gerade beim Thema sind ...

    ich habe folgendes Problem:

    Webservice, der eine Funktion hat, die einen komplexen Datentyp zurück gibt:

    Public Class Entry

    Public Titel As String = "nicht gefunden"

    Public Beschreibung As String = "nicht gefunden"

    Public Online As String = "false"

    Public DatumVon As String = "nicht gefunden"

    Public DatumBis As String = "nicht gefunden"

    End Class

     

    Ich rufe die Funktion in meinem JS Code auf:

    EntryControlWS.entryControlAjax_Webservice.getEntryData(idEntry, GetEntyData_OnSucceeded);

     

    in der Callback-Funktion lese ich dann meine Daten aus:

    function GetEntyData_OnSucceeded(result)

    {

    var tbEntry_Titel = document.getElementById('<% = tbText.ClientID %>');

    tbEntry_Titel.setHTML(result.Beschreibung);

    }

     

    Leider bekomme ich da immer ein "undefined" als rückgabe. :-/

    habe mich aber an das beispiel auf ajax.asp.net gehalten.

    Jemand eine Idee?

    • IP-Adresse ist Registriert
  • 01-03-2007 19:51 Antwort zu

    • paulinus
    • Top 500 Mitwirkender
    • Registriert am 01-03-2007
    • Beiträge 2

    AW: MS AJAX - Daten async an den Server senden

    Hallo,

    ich habe hier dasselbe Problem, wobei leider hier "PageMethods" ums Verrecken nicht gefunden wird. Also ich konnte die Funktion in der Codebehind-Datei der Page nicht aufrufen. Ich verwende die aktuelle RC-Version von Ajax.Net. Also bin ich dazu übergegangen, einen Webservice zu bemühen. Das funktioniert. Aber zum falschen Zeitpunkt, vielleicht hat ja jemand eine Idee:

    Zuerst zum Verständnis, was ich vorhabe ist, für eine Statistikfunktion, Daten über meine Besucher in einer Datenbank abzulegen. Über die Page kann ich zum Beispiel mithilfe der HttpBrowserCapabilities feststellen, welche Browser meine Besucher benutzen. Jetzt möchte ich aber auch wissen, welche Bildschirmauflösung sie haben und da habe ich nur die in Javascript verfügbaren Daten Screen.width und Screen.height gefunden.

    Bitte entschuldigt, wenn ich die Sache zu umständlich angehe, ich bin für jede praktikable Lösung dankbar. Bis jetzt kann ich die so ermittelten Werte an den Webservice schicken, der sie wiederum in Session-Variablen ablegt. In der Page_Load Funktion der Masterpage möchte ich nun die Daten ermitteln und an den DB-Layer übergeben. Leider ist beim Pageload Event  die Seite noch nicht gerendert, und wegen des erforderlichen Scriptmanagers, der leider erst innerhalb des Form-Tags notiert werden darf, steht der Funktionsaufruf auch darunter. Auch der Page_PreRender Event ist noch zu früh und wenn ich den Page_PreRenderComplete Event überschreibe, passiert gar nichts. Der wird wohl nicht ausgelöst oder er ist für die MasterPage unsichtbar.

     OK, das Problem dürfte klar umrissen sein. Ich bin gespannt, ob jemand eine Lösung kennt.

     Grüße, Paul
     


     

    • IP-Adresse ist Registriert
  • 01-04-2007 11:28 Antwort zu

    AW: MS AJAX - Daten async an den Server senden

    Mh, verstehe nicht so ganz die Notwendigkeit, die Daten im Page_load an den DB-Layer zu übergeben.

    Lass dich Seite doch komplett vom Server rendern und wenn sie an den Client zurück geschickt wird, machst du im onload-Event des Body Tag ein javascript, welches die Daten asynchron an den Webservice schickt. Der Benutzer bekommt davon ja nichts mit.

    • IP-Adresse ist Registriert
  • 01-04-2007 12:13 Antwort zu

    AW: MS AJAX - Daten async an den Server senden

    Ich galube Du bist Dir über die Funkktionsweise nicht ganz im klaren:

    Zuerst werden alle serverseitigen Aktionen ausgeführt (Masterpage, Page, Controls),
    dann der HTML-Code zum Client geschickt,
    die Seite wird im Browser gerenderd
    und erst dann fängt Ajax an auf Deinen Werbservice zuzugreifen.

    Du hast verschiede Möglichkeiten:
    1. es gibt eine Startseite, die Screen-unabhängig ist, auf der die Informationen zum Server geschickt werden und beim nächsten Aufruf hast Du Deine Informationen parat. (Ist aber nicht so gut, da ja auch Bookmarks auf die Seite verlinken können)

    2. Wenn die Sessionvariablen nicht vorhanden sind setzt Du ein Javascript rein, dass die Seite oautomatisch mit den entsprechenden Requests neu aufruft (window.navigate(default.aspx?width='+ screen.width + '&height=' +screen.height))

    3. Die Screen-abhängigen Teile der Seite werden generell per UpdatePanel gezogen => Deine Page stellt nur noch ein Gerüst dar, der Rest wird per Javascript bzw. Ajax erledigt

    Vielleich vverstehe ich Dein Problem aber auch nicht richtig....

    • IP-Adresse ist Registriert
  • 01-04-2007 17:14 Antwort zu

    • Paul Beyer
    • Top 150 Mitwirkender
    • Registriert am 01-04-2007
    • Karlsruhe
    • Beiträge 12

    AW: MS AJAX - Daten async an den Server senden

    Hallo Chris,

    > Ich galube Du bist Dir über die Funkktionsweise nicht ganz im klaren:

    da hast Du recht, ich bin mir nicht ganz im klaren, was Microsoft hinter den Kullissen getan hat, wenn der Event  Page_SaveStateComplete ausgelöst wird. Klar ist mir, daß ohne Roundtrip zum Server nichts geht. Bei all meinen Versuchen scheitere ich aber noch immer leider. Vielleicht wird es so klarer:

    Ich will, daß die Seite nachdem sie gerendert wurde Daten an den Server sendet.  Sie soll das tun, ohne daß die Seite komplett neu geladen werden muß (was ja seit Ajax gehen sollte). Ich will weiter, daß dieses automatisch geschieht (kein Button-Click event notwendig). Also Forderung1: eine JavaScript Funktion soll automatisch aufgerufen werden nachdem die Seite im Browser gerendert wurde.

    Ich will weiter, daß auf dem Server bei Eintreffen der Daten, diese zunächst an den Business Layer geschickt werden, der z.B. Seitenaufrufe von Crawlern anders behandelt als die von normalen Usern. Dort werden die Daten also aufbereitet und ggf. ergänzt an den DB Layer übergeben, der dann einen DB-record erzeugt.

    Diesen Punkt wollte ich zunächst per PageMethod lösen, was ich aber wieder verworfen habe, da das auf meinem Rechner nicht geht. Hierzu habe ich einen separaten Thread eröffnet, ich denke, das geht vielleicht mehr in die Richtung Konfiguration der Ajax.Net Umgebung als in die einer Programmiertechnischen Lösung.

    Die Alternative wurde auch schon angesprochen, einen Webservice zu bemühen. Hier habe ich die folgenden Detailprobleme: Der Webservice hat keinen Zugriff auf HTTPRequest, wo ich bislang z.B. die Browserversion etc. abfrage. Vielleicht mache ich hier auch was falsch, das Einbinden der Namespaces reicht jedenfalls nicht. Ich vermute aber, daß bei dem Datentransfer zwischen Browser und Webservice nicht dieselben umfangreichen HTTP-Header mitgesendet werden.

    Nun kann ich ja mal nachforschen, ob ich nicht dieselben Informationen auch per JavaScript bekommen kann. Über das Navigator Objekt bekomme ich schon eine Menge. Im nächsten Schritt hätte ich aber das Problem, komplexe Daten an den Webservice zu übermitteln (ein JavaScript Objekt mit vielleicht 15 Objektfeldern). Dabei komme ich aber auch nicht so recht weiter, weise ich auf Seiten des Webservice einen äquivalenten unter c# deklarierten Datentyp zu, dann wird der dortige Konstruktor aufgerufen und die Felder sind leer:

    [WebMethod(EnableSession = true)]
    public void GetVisitor(SiteBL.VisitorObject o)
    {
           
            Dummyfunktion(); //bis jetzt nur, damit ich mit dem Debugger anhalten kann;

    }

    Schreibe ich statt SiteBL.VisitorObject nur object, dann ist das object komplett leer, hat bzw. kennt also noch nicht einmal die Felder, die mein abgesendetes Javascript Objekt hatte.

    Ich denke, daß ich hier wohl am ehesten auf einem Holzweg bin. Achja, aufrufen tu ich den Webservice wie vorgeschlagen über eine Funktion hinter Body onload...

    So, das zu dem was ich inzwischen probiert habe. Vermutlich sind noch mehrere Denkfehler vorhanden, ich danke jetzt schon für die Hinweise und Aufklärung. 

     

    Grüße,

    Paul 

     

     

    Wer Schreibfehler findet, darf sie behalten ;-)
    • IP-Adresse ist Registriert
  • 01-04-2007 21:49 Antwort zu

    AW: MS AJAX - Daten async an den Server senden

    mir ist nicht ganz klar, ob Du wirklich Ajax brauchst... Ajax bedeutet auch viele Scripte die geladen werden... da kommen schnell mal 100 kB und mehr zusammen. Ajax ist für Interaktion im Userinterface wie z.B. autoausfüllen fon Selectboxen usw. Aber eins nach dem anderen.

    Forderung1: eine JavaScript Funktion soll automatisch aufgerufen werden nachdem die Seite im Browser gerendert wurde.

    Um eine Javascript Funktion nach dem laden der Seite auszuführen gibts den onLoad-Event
    Zwei Möglichkeiten den einzubinden:
            <body onLoad="myFunction()">
          <script>
              function myFunction(){
                    alert(
    'Seite geladen')
              }
          </script>

    oder Du attached einen Event (ist eleganter, da das auch in einem WebUserControl einbinden kannst)

    <script>

    //CrossBrowser Function für attachEvent

    function
    addEvent( obj, type, fn ){
        
    if (obj.addEventListener) {
                 obj.addEventListener( type, fn,
    false );
        }
    else if (obj.attachEvent) {
                 obj[
    "e"+type+fn] = fn;
                obj[type+fn] =
    function() { obj["e"+type+fn]( window.event ); }
                obj.attachEvent(
    "on"+type, obj[type+fn] );
        }
    }

    //die Funktion zu onLoad huinzufügen
    addEvent(window,
    "load",myFunction)

    //die Function die ausgeführt weird wenn die Seite geladen ist
    function myFunction(){
          alert(
    'Seite geladen')
    }

    </script>

     

    Wenn es Dir nur darum geht einmal die Werte zum Server zu schicken um sie in einer Session zu speichern ist Ajax oversized.
    Ich würde dies über eine kleinen Trick an den Server senden.


    <script type="text/javascript">

    document.write('<' + 'script language="JavaScript" type="text/javascript" src="pickUpBrowserData.aspx?screenWidth=' + window.screen.width + '&screenHeight=' + window.screen.height + ' "></' + 'script>')

    //kannst Du natürlich entsprechend mit weiteren Parametern ausbauen...

     </script>

     und Deine pickUpBrowserData.aspx sieht dann so aus:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        
    Session("screenWidth") = Request("screenHeight")
         Session(
    "screenWidth") = Request("screenWidth")
         Response.End()
    End Sub

    was Du dann noch alles mit den empfangenen Daten machst bleibt Deiner Fantasie überlassen.
    Ist auf jeden Fall ein einzeiler im HTMLCode in Classic Javascript.

    War das das was Du suchst? Sonst meld Dich nochmal... 

     

    • IP-Adresse ist Registriert
  • 01-05-2007 11:25 Antwort zu

    • Paul Beyer
    • Top 150 Mitwirkender
    • Registriert am 01-04-2007
    • Karlsruhe
    • Beiträge 12

    AW: MS AJAX - Daten async an den Server senden

    Hallo Chris,

     danke für die Vorschläge, sie bringen mich aber nicht wirklich weiter. die Idee mit PickupBrowser.aspx hörte sich nicjht schlecht an, sie hat aber ebenfalls zu einem Ergebnis geführt das ich schon auf x andere Weisen erreicht habe. Das Ergebnis kann ich auf Serverseite erst nach einem reload der Seite verwerten, und genau das möchte ich ja vermeiden.

    Also Session-Variablen nach dem Rendern mit den richtigen Werten zu füllen ist kein Problem. Danach sollen die Daten aber (ohne einen reload der Seite) an den Server geschickt udn dort verarbeitet werden. Daten ohne Reload zu schicken geht meines Wissens nur mit Ajax. Und hier drehen wir uns wieder im Kreis, schicke ich sie an den Webservice, dann bekomme ich das mit dem komplexen zu sendenden Objekt (noch) nicht hin, will ich sie an die WEB Applikation auf dem Server senden, sagt mir der Browser, daß er "PageMethods" nicht kennt.

     
    Grüße,

    Paul
     

    Wer Schreibfehler findet, darf sie behalten ;-)
    • IP-Adresse ist Registriert
  • 01-05-2007 11:32 Antwort zu

    AW: MS AJAX - Daten async an den Server senden

    Setz mal vor deine Methode in deiner ASPX-Seite noch

    <ScriptMethod()> _

     

    also insgesamt so:

    <WebMethod()> <ScriptMethod()> _

    Public Function PageMethods(ByVal text As String) As String

    • IP-Adresse ist Registriert
  • 01-05-2007 12:03 Antwort zu

    • Paul Beyer
    • Top 150 Mitwirkender
    • Registriert am 01-04-2007
    • Karlsruhe
    • Beiträge 12

    AW: MS AJAX - Daten async an den Server senden

    Hallo,

     also das Beispiel funktioniert bei mir nicht, wobei ich auch nicht weiß, was ich genau tue in dem VB-Code. Visual Basic Syntax kenne ich so gut wie die Chinesische Sprache :-(

     Meine Vermutung mit dem Namespace hat nicht geholfen, ich habe auf der default.aspx seite noch

    <%@ Import Namespace="System.Web.Services" %>

    hinzugefügt. Es ändert sich nichts, beim Aufruf der Seite bekomme ich die Fehlermeldung 'Sys' ist undefiniert.

    Ändere ich wie Oben die Zeile  <WebMethod()> <ScriptMethod()> _ , dann zeigt mein Browser  einen Kompilierungsfehler an. Nach einigem Probieren habe ich herausgefunden, daß es heißen muß <System.Web.Services.WebMethod()><System.Web.Script.Services.ScriptMethod()> _

    Wie gesagt, ich weiß nicht, was ich tue in VB. In c# hätte ich die Namespaces mit "using" eingebunden und dann [WebMethod][ScriptMethod] geschrieben. Wie auch immer, das ScriptMethod Attribut führt auch nicht weiter, der Fehler das 'Sys' undefiniert ist, bleibt.

    Grüße,

    Paul 

     

    Wer Schreibfehler findet, darf sie behalten ;-)
    • IP-Adresse ist Registriert
Seite 1 von 2 (24 Treffer) 1 2 > Weiter