Laden...

(Text) Auflistung dynamisch erweitern

Erstellt von schuppsl vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.608 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren
(Text) Auflistung dynamisch erweitern

Hi.

Auf meiner asp.net Startseite möchte ich als erstes verschiedene TcpClients erstellen und das Ergebnis der geglückten oder nicht geglückten Verbindung auf dieser Seite darstellen lassen.

D.h. es läuft folgendermaßen ab:

Seite starten.

  • Text: "Die Verbindung wird aufgebaut, bitte warten"
  • Erste Verbindung aufbauen
  • Text: "Die Verbindung zu XXX war erfolgreich" + image
  • Text: "Baue Verbindung zu XXX auf"
  • Zweite Verbindung aufbauen
  • Text: "Es konnte keine Verbindung zu xxx aufgebaut werden" +image-...
    usw usw.

Dabei soll also der vorhergehende Text+ grafik stehen bleiben und der nächste darunter angezeigt werden.
Dazwischen wird dann immer die Verbindugn aufgebaut.

Wie könnte man so etwas realisieren?

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Du könntest Dir in der Session merken, welche Verbindungen bereits getestet wurden, und mit welchem Ergebnis. Dann hast Du alle Informationen, um den gesamten Output neuzugenerieren.

Ich würde Dir aber empfehlen die Einzeltests über Ajax aufzurufen und das Ergebnis clientseitig anzuhängen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Nun, ich wollte das Ganze über WebMethods machen, da ich das ja nun kann, aber in einer Webmethod habe ich kenie Session.
Beim ersten Aufruf sollen die Verbindungen gestartet werden und automatisch nacheinander abgearbeitet werden...

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Du kannst die Session aktivieren. Guck Dir mal die Konstruktoren von WebMethodAttribute an 😉

Gruß, MarsStein

Edit: wobei ich nicht sicher bin, ob das bei PageMethods greift, die müssen ja static sein ...

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

1.433 Beiträge seit 2006
vor 13 Jahren

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Danke Ihr beiden...bei asp.net hat man nie ausgelernt.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Wenn ich jetzt noch auf die Controls in der zugehörigen aspx Seite zugreifen könnte wäüre ich glücklich. 🤔

1.433 Beiträge seit 2006
vor 13 Jahren

Wenn ich jetzt noch auf die Controls in der zugehörigen aspx Seite zugreifen könnte wäüre ich glücklich. 👶

Ist leider nicht möglich, da es eine statische Methode ist.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

hm...aber sonstige Funktionen kann ich aufrufen, oder?
Geht nämlich irgendwie auch nicht...

1.433 Beiträge seit 2006
vor 13 Jahren

hm...aber sonstige Funktionen kann ich aufrufen, oder?
Geht nämlich irgendwie auch nicht...

Nein leider nicht, dass ist der Nachteil von statischen WebMethoden.

Am besten rufst Du per JQuery eine solche Methode auf und baust Dir dann die Controls dynamisch mit JTemplates auf.

EDIT: Sowas in der Art hier.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Menno, funktioniert jetzt ganz gut, aber das einzigste daß ich noch brauche, ist ein Button der dann erscheint, wenn alle Verbindungen ok sind.
Da ich ja nicht auf die Steuerlemente zugreifen kann, habee ich die Synthax einer Buttons mit Postbackurl abgeschaut und diese wird dann von der Webmethod zurückgegeben.
Leider funzt der Postback nur auf die eigene Seite, aber nicht auf die Login seite:

" <input type='submit' name='LoginBtn' value='Weiter zum Login' onclick=javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;LoginBtn&quot;, &quot;&quot;, false, &quot;&quot;, &quot;login.aspx&quot;, false, false))' id='LoginBtn' />";

Der Button wird angezeigt, aber der Postback geht nur auf die eigene Seite, statt auf die Loginseite....gibts da eine andere Möglichkeit?

EDIT: Funktioniert,habe die Anführungszeichen falsch gesetz.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Geht doch nicht.

Der Button funzt zwar und ich komme auch auf die Loginseite, bekomme aber dann den Fehler:

Fehler!

System.Web.UI.ViewStateException: Ungültiger ViewState. Client IP: 127.0.0.1 Port: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4 ViewState: /wEPDwULLTEzNjgyMjcxOTFkZN6mc4Q6sDs97bvFiwjmTzjkp6nG Referer:
>
Path: /login.aspx ---> System.Web.HttpException: Daten können nicht überprüft werden. bei System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Int32& dataLength) bei System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) --- Ende der internen Ausnahmestapelüberwachung ---

Also ich denke mal, daß ich dem den Button unterjuble und der ist damit nicht einverstanden, könnte man das so sagen?
Was soll ich dagegen machen?

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Habe da noch ein anderes fettes Problem:

Auf einer normalen Seite, die nicht von der Masterseite abgeleitet wird, funktioniert das Ganze mit der WebMethod.

Mache ich allerdings das auf eine Seite die von der Masterseite stammt, dann kommt folgende Fehlermeldung in der Javascript fehlerconsole:

Fehler: Sys.ArgumentTypeException: Das Objekt mit dem Typ String kann nicht in den Typ Function konvertiert werden.
Parametername: onSuccess
Quelldatei:
>

Zeile: 5381

Irgendwie habe ich doch darauf keinen Einfluss, oder?
Was kann ich da machen?

Hier mein Javascript Code:


<script type='text/javascript'>
var zaehl=0; function loadHelloWorld1()
{
rowId = setInterval(function() {zaehl++; 
 PageMethods.MakeFooterFunc('', onComplete);},500);
}function onComplete(result){document.getElementById('testZeitLabel').innerHTML= result;} 
 window.setTimeout('loadHelloWorld1()', 500); 
</script>;

Also MakeFooterFunc wird nicht aufgerufen, wegen dem Fehler der in einer normalen Seite nicht auftritt (exact dasselbe Script).

Kann ich da was machen?
Ich wandle doch onSuccess nirgens....

Die Fehlerconsole verweis auf die MicrosoftAjax.debug.js
und diese Zeile:

var e = Function._validateParams(arguments, [
{name: "servicePath", type: String},
{name: "methodName", type: String},
{name: "useGet", type: Boolean},
{name: "params"},
{name: "onSuccess", type: Function, mayBeNull: true, optional: true},
{name: "onFailure", type: Function, mayBeNull: true, optional: true},
{name: "userContext", mayBeNull: true, optional: true}

Da habe ich ja herzlich wenig Einfluss darauf...aber wenns ein Bug wäre, dann würde es ja gar nicht gehen...

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Also jetzt habe ich es noch nach verschiedenen Beispielen im Web gemacht, auch mit "Geheimtricks", aber wie es scheint geht der Aufruf einer Webmethode per Javascritpt nicht in der Masterpage, UserControl und auch nicht in einer von Masterpges Abgeleiteten Seiten.

Auch wenn ich den Scriptmanager in die Seite setze usw usf.
Keine Chance!
Nur auf "normalen" Seiten gehts.

Somit benötige ich eine andere Lösung....

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

um dem ViewSTate-Problem zu entgehen, könntest Du einfach ein ganz normales PostBack machen und in der serverseitigen OnClick-Methode des Login-Buttons mittels Server.Transfer() auf die Login-Seite umleiten.

und auch nicht in einer von Masterpges Abgeleiteten Seiten.

Ich vermute mal Du meinst die Seiten die die MasterPage benutzen. Zumindest das sollte funktionieren, wobei der Scriptmanager in der MasterPage stehen kann und die PageMethods in den jeweiligen Pages.

Wenn's wirklich nicht klappt hängt es vielleicht mit den in Lifecycle Verständnisfrage + weitere erwähnten obout-Controls zusammen (kenne die nicht) ??

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca