Laden...

Forenbeiträge von schuppsl Ingesamt 789 Beiträge

25.06.2010 - 14:11 Uhr

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....

25.06.2010 - 12:12 Uhr

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...

24.06.2010 - 15:58 Uhr

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?

24.06.2010 - 11:01 Uhr

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.

24.06.2010 - 08:54 Uhr

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

24.06.2010 - 08:18 Uhr

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

24.06.2010 - 07:44 Uhr

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

23.06.2010 - 17:48 Uhr

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...

23.06.2010 - 17:18 Uhr

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?

22.06.2010 - 14:38 Uhr

Also ich machs nun einfach so, daß ich ein asp:label Control habe, welches ich per Javascript verändere:

function onComplete(result)
{
document.getElementById("testZeitLabel").innerHTML= result;

}  

In der Webmethod kann ich nun Serverseitig tun und lassen was ich will, sprich die Verbindung testen und dann ein entsprechendes Bildchen anzeigen lassen.

Im Falle einer Sekundengenauen Uhrzeit vom Server sieht das Ganze dann so aus:


<script type="text/javascript">
  function loadHelloWorld()
    {
       rowId = setInterval(function() {
         PageMethods.HelloWorld("", onComplete);
       },1000);
     
    }
    
    function onComplete(result)
    {
    document.getElementById("testZeitLabel").innerHTML= result;
        
    }   
    </script>

Und im Code Behind Teil:


 [WebMethod]
        public static string HelloWorld(string name)
        {
            return DateTime.Now.ToString();

        }

DAS ist die Lösung, mit den Bildchen gehts auch schon...

Vielen Dank an schaedld und MarsStein für die Hilfe!

22.06.2010 - 14:04 Uhr

Ok, aber die eigentliche Frage ist ja: Wie kann ich dann partiell die Seite aktualisieren **ohne **Updatepanel?

Gerade das Updatepanel ist ja das praktische daran...sonst müsste ich ja die AJAX Requests wieder per Hand einfügen oder wie kann ich das machen?

Ich möchte ja im Footer der Seite eine Ampel einbauen, welche den Verbindungsstatus zu einem Programm (per Socket) darstellt.
Grün bedeutet verbunden, rot nicht verbunden.
Das funktioniert eben bereits mit Updatepanels, birgt aber die besagten Probleme mit sich.

Ich könnte also per Javascript einen Timer starten der alle 20 Sekunden die Webmethod abruft, welche wiederum den Status zum Socket prüft.
Je nach Status soll dann die grüne Ampel oder die rote Ampel angezeigt werden.
Per Updatepanel ist mir das klar, da wird ein Ajax Request erzeugt, welchen ich ja nun wohl selbst erzeugen muss?

22.06.2010 - 13:55 Uhr

Hi, ja sind static.
Aber kann es sein, daß dies in einer Masterpage nicht funktioniert?
Bei einer normalen ASPX Seite gehts nämlich...

22.06.2010 - 13:42 Uhr

Hallo MarsStein, danke für die Hinweise ich kämpfe mich gerade durch, auch durch den BlogEintrag von schaedld.

Habe auch das hier gefunden,bekomme beim Ausführen aber immer die Meldung, daß PageMethods nicht definiert ist (befindet sich in der MasterPage), obwohl ich im Scriptmanager EnablePageMethods auf true gesetzt habe.

EDIT:
Also auf einer normalen asxp Seite geht es, aber warum auf einer Masterpage nicht?

22.06.2010 - 11:27 Uhr

Aber wenn ich das nicht mit einem UpdatePanel mache, dann wird eben die ganze Seite neu geladen, genau das was ich ja verhindern möchte.
Wenn ich also nur einen Teil der Seite aktualisieren möchte, komme ich um Ajax/Updatepanel nicht herum, oder liege ich nun gänzlich falsch?

22.06.2010 - 10:51 Uhr

Also mir ist überhaupt nicht klar, was dieser Blogeintrag mit meinem Problem zu tun haben könnte... 🤔

20.05.2010 - 18:26 Uhr

Aber ich dachte genau dafür ist ein UpdatePanel da?

Die Uhrzeit kommt von einem Socket vom Server, es ist nicht die lokale Zeit.

kannst Du mir das mit der asynchronen Webmethode etwas näher erklären?

20.05.2010 - 18:14 Uhr

Hello Leute.

Hätte da mal wieder ein Problemchen.

In Meiner Anwendung habe ich eine Seite, welche einige Daten an ein Hardwareterminal sendet.
Also Footer habe ich ein Updatepanel, welches die Uhrzeit anzeigt und alle 20 Sekunden aktualisiert wird.
Funktioniert so weit.

Nur wird jedes Mal die ganze Seite gerendert, was bedeutet, daß die Daten alle 20 Sekunden an das Terminal geschickt werden, was natürlich nicht sein soll.

Der Datenabgleich passiert im OnLoad Ereignis, wenn IsPostback true ist.
Und da liegt auch das Problem:

Das Updatepanel wird per Timer aktualisiert, welches alle 20 Sekunden einen Postback auslöst und somit die Datenkommunikation anstößt.

Warum ist das so?

21.04.2010 - 14:30 Uhr

In der Anwendung sind für diesen Fall alle dynamisch erstellt:-)

Vielen Dank für Deine Zeit, deine Mühe und Deine Einschätzung.
schuppsl

21.04.2010 - 09:53 Uhr

Ok, das mit dem Viewstate verstehe ich ( noch ) nicht.
M.E. nach werden die Textfelder wiederhergestellt ob ich das will oder nicht.
Ob nun per viewstate oder POST Daten ist egal, denn das ist die Wurzel allen Übels.

Dann w.g 2 Mal abrufen:

OnLoad:
Controls erstellen und mit Daten befüllen.Ob Postback oder nicht.

BtnSave_Click:
Inhalt der Controls aus Onload mit den aktuellen Daten der Controls vergleichen, damit ich feststellen kann, welche geändert wurden.
Sonst werden alle als geändert erkannt (von ASP.NET) was zu einem unnötig erhöhren Datendurchsatz auf dem Socket führen würde.
Veränderte Daten werden dem Socket übergeben.

OnPreRender:
Socket wird nach akuellen Daten gefragt.
Controls aus Onload werden im ParentControl gesucht und mit den neuen Daten aus dem Socket gefüttert.

Ich sehe keine andere Möglichkeit, da ich anders nicht feststellen kann welche Texte/Checkboxen etc verändert wurden.

Fülle ich diese in OnLoad nicht immer auf, werden eben alle Controls als verändert erkannt....

EDIT:
Das Durchsuchen der Controls finde ich nach einer Überlegung nicht kritisch (Rechenzeit), da der Controlbaum ja schon vollständig aufgebaut ist und ich denke mal das mach keinen Unterschied zu einer Liste.

21.04.2010 - 08:30 Uhr

Hallo schuppsl,

bitte schieß mich jetzt für diese Anwort nicht auf den Mond 👶
Dein Problem hat mit dem ViewState IMHO gar nix zu tun, er bezieht sich ja auf Controls, die keine Formularelemente sind. Die Textbox ist aber eins, daher war mein letzter Post auch Unsinn, sorry. Der eingegebene Text wird aus den Formulardaten der HTML-Form wiederhergetelt, wenn ein PostBack ausgelöst wird - also direkt aus dem POST-Request
Du hast also gar keine Möglichkeit, das zu unterbinden.
Deine Vorgehensweise ist somit völlig in Ordnung.

Das beruhigt!

Sorry, wenn ich mich unverständlich ausgedrückt habe, aber mit Controls meinte ich: Textbox, CheckBox und Dropdownlist und Labels.
Ist also alles ViewState behaftet.

Ich verhindere das zweite Abrufen vom Socket teilweise, indem ich es von einem Cache auslese.
Teilweise deshalb, weil ich es nur so machen kann, wenn der Datensatz zwischen OnLoad und OnPreRender nicht verändert wurde.

D.h: da gibts noch mehr Dinge:
Z.B. habe ich eine Pfeilnavigation mit der ich die Datensätze vor-und Zurück navigieren kann, zusätzlich ein Grid indem alle Datenensätze aufgelistet werden und bei klick wird der entsprechende aufgerufen.
Dann habe ich noch ein TabStrip....
Jedes Mal werden die Controls wie oben beschrieben erstellt und ausgewertet.

Das Button_Click Event kommt erst nach OnLoad, also weiß ich beim Erstellen noch nicht, ob der User den nächsten Datensatz haben möchte oder nicht.
Deshalb speichere ich das beim Click Event und rufe danach in OnPreRender die Daten erneut, also mit der neuen Anforderung ab.

Das macht das Zusammenspiel nicht gerade leichter, aber mit meiner Vorgehensweise geht das.
Ich suche nur immer nach einer "einfacheren" Lösung, da ich befürchte irgendwas übersehen zu haben.

Z.B. finde ich das Suchen der Controls in PreRender sehr umständlich und Zeitraubend. Aber ich muss ja alle suchen(aus onload) und vergleichen mit dem Original Text, sonst kann ich nicht feststellen, welche geändert wurden.

Dein Postbackbeispiel geht so leider auch nicht, da

  1. die Controls in derselben Funktion erstellt und mit Daten befüllt werden, das ist eng miteinander verknüpft.
    und
  2. Die Daten bei jedem Postback anders sein können, ich muss sie also bei jedem Postback aktuell abrufen.
    Das ist ja auch in Ordnung, nur das Zweimalige abrufen würde ich gerne verhindern.
20.04.2010 - 11:37 Uhr

Also es geht vereinfacht darum:

Ich erstelle in OnLoad dynamische Steuerelemente auf Grundlage einer Datei,
Ich weiß also erst nach dem Lesen der Datei welche Steuerelemente und wieviele von welchen ich erzeugen muss.
Gleichzeitig lese ich aus einem Socket die Daten für die Steuerelemente und weise diese entsprechend zu.

So, die Controls sind erzeugt und mit Daten befüllt.
Funktioniert!

Dann habe ich einen Speichern Button.
Ändere ich Daten in einem Textfeld und speichere diese mit dem Speichern Button, wird Dank ViewState der neue Wert im Textfeld angezeigt.

Der Vorgang ist so: Text ändern, Klick auf Speichern, Daten in Socket schreiben.
Der Vorgang in ASP.NET ist so (bei Click auf Speichern Button)

  • Onload(Controls erzeugen, ViewState wiederherstellen)
  • BtnSave_Click Event ausführen, (controls nach veränderungen absuchen und diese in den Socket schreiben)

So.
Die Daten sind gespeichert und die Veränderungen in der Textbox werden auch dargestellt, dank ViewState.

Problem:
Ändere ich ein Textfeld, wird dieser neue Text wiederhergestellt, egal ob ich auf speichern klicke oder nicht!
Also führe ich eine andere Funktion auf, wird der neue Text trotzdem wieder dargestellt, obwohl ich nicht gespeichert habe. Dank ViewState!
Da dieses Verhalten nicht gewünscht ist, bleibt mir nichts andere übrig, als in PreRender die Daten vom Socket nochmals abzurufen, die in OnLoad erzeugten Controls zu durchlaufen und mit Text zu bestücken.

Dann habe ich immer die aktuellen Texte, egal ob diese gespeichert/verändert wurden oder nicht.

HA, ich rufe die Daten für die Controls ja also zwei Mal ab...blödsinn könnte man meinen.
Also gehe ich hin und erzeuge sie halt erst in PreRender, statt in OnLoad und habe somit immer die richtigen Texte drin.

Doch da gibts es ein Problem:

Da ich in PreRender keine Events den Textboxen zuweisen kann(changed), kann ich nicht feststellen, welche Texte geändert wurden.
Denn: 1 habe ich kein changed Event und 2. existieren die Controls im BtnSave_Click Event noch nicht , da sie ja noch nicht erzeugt wurden!

Also doch wieder zurück und in OnLoad erzeugen und in PreRender erneut mit Daten befüllen.

Dann kann ich im BtnSave_Click Event die im Onload erzeugten Controls durchsuchen und mit den aktuellen Werten vergleichen und so feststellen, welche geändert wurden indem ich die erst abgerufenen Texte (onload) zwischenspeicher eund mit den aktuellen (postback) vergleiche.

Ist Umständlich, aber ich sehe keinen anderen Weg!
Leider muss ich die Daten für einen Vorgang mehrfach abrufen. Dank ViewState.

Viewstate lässt sich weder global, auf Page Ebene oder am Control selbst deaktivieren. Der Text wird bei einem Postback wieder hergestellt ob ich will oder nicht!
Genau das führt zu den o.g. Problemen.

Wenn jetzt jemand sagt, ich hätte nicht verstanden was ViewState ist oder macht, oder meint ich solle mit mal den LifeCycle anschauen, dann möge er mir bitte eine Lösung präsentieren, da ich schon Monatelang immer wieder an diesem Problem arbeite und es mein ganzes Projekt ausbremst.
Lifecycle habe ich verstanden, ich weiß wann welche Events gefeuert werden und wann ich am Besten was tue (Controls erzeugen usw).
ViewState ist mir nach wie vor zumindest teilweise ein Rätsel.
Danke.

19.04.2010 - 20:55 Uhr

Das habe ich schon versucht. Am Control selbst, Systemweit, auf der Page...bringt alles nichts, der Viewstate wird wieder hergestellt ob ich will oder nicht.

19.04.2010 - 15:11 Uhr

Naja eigentlich ganz einfach(Teilweise):

Erstelle ich im OnLoad Event ein dynamisches Control, wird dessen Zustand per Viewstate wiederhergestellt, egal welchen Wert ich dem bei der Erstellung zuweise:


 int zaehl = Convert.ToInt32(Session["test"]);
            zaehl++;
          
                TextBox lab = new TextBox();
                lab.ID = "ff";
                lab.Text = "Onload"+zaehl;
                Panel1.Controls.Add(lab);

                Session["test"] = zaehl;

Die Textbox zeigt immer den Wert Onload1 obwohl sich der Wert in "zaehl" bei jedem Postback erhöht.
Viewstate sei Dank"(ironie).

Möchte ich also bei jedem Mausklick der Textbox einen anderen Wert zuweisen, muss ich diese im Prerender Ereignis suchen und den Wert entsprechend zuweisen, da hier ViewState keine Rolle mehr spielt.

Ich könnte auch die Controls im Prerender Event erzeugen und mit Text bestücken.
Nur habe ich dann das nächste Problem:
Bei einem button_Click Event, welches vor Prerender kommt, habe ich meine Textboxen nicht, da diese erst in Prerender erstellt werden.
Also kann ich weder darauf zugreifen, noch suchen noch sonstwas.
Text_Changed Events gehen hier dann auch nicht.
Also bleibt mir nichts anderes übrig, als die COntrols in OnLoad oder früher zu erstellen und in PreRender mit Text zu bestücken.

19.04.2010 - 14:15 Uhr

Ok danke werde ich mal versuchen.
Wofür ich das brauche, wäre jetzt eigentlich zu komplizwickt zu erklären...

19.04.2010 - 13:18 Uhr

Hallo,
die Überschrift sagt es bereits.

Im ASP.NET Lifecycle kommt das OnLoad Event und danach die Button_Click Events.
Ich weiß also in OnLoad noch nicht, welcher Button angeklickt wurde.

Geht das trotzdem irgendwie?

15.04.2010 - 16:21 Uhr

Hi, also das Problem mit der Meldung "Datei ist nicht vorhanden" konnte ich nun endlich lösen, mit Hilfe dieses Threads.

Es war so, daß in irgendwelchen Javascript oder CSS Dateien die nicht mal von mir sind auf irgendwelche Bilder referenziert wird, die es nciht gibt.

Mit Hilfe von:


// Code that runs when an unhandled error occurs
            string applicationError = "Application_Error : ";
            Exception ex = Server.GetLastError().GetBaseException();
            applicationError += " Current Request File Path: " + HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;
            applicationError += " Exception: " + ex.ToString();

in Application_Error kann ich die Datei anzeigen lassen. Das war immer das Problem, daß die Datei nirgens in der Fehlermeldung aufgetaucht ist.

Ich hoffe, es profitiert noch jemand von der Lösung, denn es ist nicht einfach zu finden.

Grüße schuppsl

13.04.2010 - 16:12 Uhr

Okidoki, danke!

13.04.2010 - 15:52 Uhr

Verdammt ich wusste es!
Aber anscheinend muss das Problem ja doch bekannt sein, lt. dem MS Artikel..nur die Lösung...?

Aber vielen Dank für Deine Mühen und Deine Zeit!

13.04.2010 - 14:52 Uhr

Ins PreRender verschieben bringt nichts, da nach Page_Load keine Events mehr registriert werden.
Also Page_Load ist die letzte Möglichkeit Events zu reggen...

13.04.2010 - 14:25 Uhr

Hallo,

  1. an welchen Stellen in Deiner Page_Load benutzt Du DataBind bzw IsPostBack?

Was diese Steuerelemente betrifft: Nirgens.
DataBind gibs nicht, da die Daten aus einem Socket kommen und isPostback ...hm.Die
Steuerelemente werden bei jedem Aufruf neu gerendert und mit Daten befüllt (können jedes Mal ander sein ), weshalb dann IsPostback?

In der MS Lösung steht ja:

Stellen Sie sicher, dass Sie das Das Change-Ereignis für das dynamisch erstellte Steuerelement verknüpfen, bevor ASP.NET die Seite darstellt. Das stellt sicher, dass Anzeigestatus für das Steuerelement vorhanden ist.

Das wäre also im OnInit Ereignis. Das geht aber nicht, da ich das Steuerelement erst im OnLoad Ereignis erstelle. Vorher geht es nicht, da die Erstellung noch von anderen Faktoren abhängt.

13.04.2010 - 13:39 Uhr

Ja schon.
Aber was kann ich dagegen tun?
Die Selektion stimmt nach dem Postback, also wählen ich z.B. 41-50 aus, steht das nach dem Postback auch wieder drin.

Hier gibts ne Lösung: http://support.microsoft.com/kb/314809

Verstehe ich aber nicht. Ich erstelle erst die Controls, dann verknüpfe ich das Ereignis.

EDIT, neue Erkenntnisse:

  • Seite wird das erste Mal aufgerufen
  • Combobox wird verändert (nicht der Erste Eintrag)- Event wird ausgelöst, Seite neu geladen
  • Klick auf einen Button - Event wird ausgelöst Seite neu geladen.
    -** Aus der Combobox wird der Erste Eintrag ausgewählt - Event wird nicht ausgelöst**

Daraus könnte man jetzt was Schlussfolgern, nur was ?
Daß wie Du beschrieben hast der Anzeigezustend nicht hergestellt wird!
(da beim Ersten Laden der Seite ja der 1. Eintrag bereits selektiert ist)

Nur was kann ich dagegen tun?
Ich meine die Anzeige stimmt ja wenn ich irgendwas auswähle, wird das auch nach dem Reload dargestellt...was stimmt da dann nicht?

13.04.2010 - 12:35 Uhr

Also das sind die relevanten Steuerelemente, insgesamt sinds 1500 Zeilen Quellcode...wäre wohl ein bischen viel das alles hier zu posten:-)
Ich habe inzwischen die Listbox in eine Dropdownlist verwandelt, aber mit demselben Ergebnis.

<td style="padding-left:3px;">
<div id="ctl00_Content_divTabContainer" style="border:1px solid #c0cff0;width:860px;height:auto">

  								&lt;div id=&quot;ctl00_Content_panel_tab3&quot;&gt;  
  											  
  								  
  								&lt;div&gt;  
  	&lt;input type=&quot;image&quot; name=&quot;ctl00$Content$imgBtnBackward&quot; id=&quot;ctl00_Content_imgBtnBackward&quot; title=&quot;Zurück&quot; src=&quot;../images/basic/left_16.png&quot; alt=&quot;&gt;&gt;&quot; style=&quot;border-width:0px;&quot; /&gt;&lt;select name=&quot;ctl00$Content$combID&quot; onchange=&quot;javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$Content$combID\&#39;,\&#39;\&#39;)&#39;, 0)&quot; id=&quot;ctl00_Content_combID&quot;&gt;  

  		&lt;option value=&quot;1 - 10&quot;&gt;1 - 10&lt;/option&gt;  
  		&lt;option value=&quot;11 - 10&quot;&gt;11 - 10&lt;/option&gt;  
  		&lt;option value=&quot;21 - 20&quot;&gt;21 - 20&lt;/option&gt;  
  		&lt;option value=&quot;31 - 30&quot;&gt;31 - 30&lt;/option&gt;  
  		&lt;option value=&quot;41 - 40&quot;&gt;41 - 40&lt;/option&gt;  
  		&lt;option value=&quot;51 - 50&quot;&gt;51 - 50&lt;/option&gt;  

  		&lt;option value=&quot;61 - 60&quot;&gt;61 - 60&lt;/option&gt;  
  		&lt;option value=&quot;71 - 70&quot;&gt;71 - 70&lt;/option&gt;  
  		&lt;option value=&quot;81 - 80&quot;&gt;81 - 80&lt;/option&gt;  
  		&lt;option value=&quot;91 - 90&quot;&gt;91 - 90&lt;/option&gt;  
  		&lt;option value=&quot;101 - 100&quot;&gt;101 - 100&lt;/option&gt;  
  		&lt;option value=&quot;111 - 110&quot;&gt;111 - 110&lt;/option&gt;  

  		&lt;option value=&quot;121 - 120&quot;&gt;121 - 120&lt;/option&gt;  
  		&lt;option value=&quot;131 - 130&quot;&gt;131 - 130&lt;/option&gt;  
  		&lt;option value=&quot;141 - 140&quot;&gt;141 - 140&lt;/option&gt;  
  		&lt;option value=&quot;151 - 150&quot;&gt;151 - 150&lt;/option&gt;  
  		&lt;option value=&quot;161 - 160&quot;&gt;161 - 160&lt;/option&gt;  
  		&lt;option value=&quot;171 - 170&quot;&gt;171 - 170&lt;/option&gt;  

  		&lt;option value=&quot;181 - 180&quot;&gt;181 - 180&lt;/option&gt;  
  		&lt;option value=&quot;191 - 190&quot;&gt;191 - 190&lt;/option&gt;  
  		&lt;option value=&quot;201 - 200&quot;&gt;201 - 200&lt;/option&gt;  
  		&lt;option value=&quot;211 - 210&quot;&gt;211 - 210&lt;/option&gt;  
  		&lt;option value=&quot;221 - 220&quot;&gt;221 - 220&lt;/option&gt;  
  		&lt;option value=&quot;231 - 230&quot;&gt;231 - 230&lt;/option&gt;  

  		&lt;option value=&quot;241 - 240&quot;&gt;241 - 240&lt;/option&gt;  

  	&lt;/select&gt;&lt;input type=&quot;image&quot; name=&quot;ctl00$Content$imgBtnForward&quot; id=&quot;ctl00_Content_imgBtnForward&quot; title=&quot;Vor&quot; src=&quot;../images/basic/right_16.png&quot; alt=&quot;&gt;&gt;&quot; style=&quot;border-width:0px;&quot; /&gt;  
  &lt;/div&gt;&lt;table id=&quot;ctl00_Content_dropzone&quot; border=&quot;0&quot;&gt;

EDIT:
Also ich habe nun folgendest festgestellt:
Egal ob ListBox oder DropdownList:

Klicke ich nach dem Aufruf der Seite (Combobox noch nicht geklickt) auf die Pfeile oder andere Buttons wird das Event SelectedIndexChanged nicht ausgelöst!(wie es sein soll)

Wähle ich ein Mal etwas aus der Combobox aus, wird das Event aus gelöst und darüber hinaus bei jedem anderen Mausklick, egal welcher Button.

Immer erst SelectedIndexChanged und dann die anderen Klick-Events.

Scheint so, als wenn die Anwendung nach erstmaligem Klick dauerhaft der Meinung ist, daß die Combobox betätigt wurde, obwohl das nicht der Fall ist.

Ein Fall für Viewstate???
Die Controls werden im OnLoad Ergeignis erstellt.

13.04.2010 - 11:48 Uhr

Hallöle, mal wieder ein blödes Problem:

Ich erstelle dynamisch zwei Imagebuttons und eine Combobox.
Die Combobox soll auf das Changed Ereignis reagieren:



ImageButton imgBtnBackward = new ImageButton();
imgBtnBackward.ID = "imgBtnBackward";
imgBtnBackward.ImageUrl = "~/images/basic/left_16.png";
imgBtnBackward.AlternateText = ">>";
imgBtnBackward.ToolTip = "Zurück";
imgBtnBackward.Click += new ImageClickEventHandler(imgBtnBackward_Click);
pan.Controls.Add(imgBtnBackward);


ListBox combo = new ListBox();
combo.ID = "combID";
combo.Rows = 1;
combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);
combo.AutoPostBack = true;

int anzComb = Convert.ToInt32(b[1].Substring(5, 5)) / Convert.ToInt32(b[5]);

ListItem itemFirst = new ListItem("1 - 10";);
combo.Items.Add(itemFirst);

for (int i = 1; i <= anzComb; i++)
{
int min, max;
min = i * 10 + 1;
max = i * 10;

ListItem item = new ListItem(min.ToString() + " - " + max.ToString());
combo.Items.Add(item);
}
pan.Controls.Add(combo);



ImageButton imgBtnForward = new ImageButton();
imgBtnForward.ID = "imgBtnForward";
imgBtnForward.ImageUrl = "~/images/basic/right_16.png";
imgBtnForward.AlternateText = ">>";
imgBtnForward.ToolTip = "Vor";
imgBtnForward.Click += new ImageClickEventHandler(imgBtnForward_Click);
pan.Controls.Add(imgBtnForward);

Das Problem ist nun, daß das Event SelectedIndexChanged immer ausgelöst wird.
Es wird ausgelöst, wenn ich einen der Imagebuttons klicke oder ein ganz anderer auf dieser Seite.
Das möchte ich natürlich nicht haben, sondern nur wenn ich einen anderen Wert aus der Combobox auswähle.

Warum wird das Event bei jedem Mausklick ausgeführt?

07.04.2010 - 14:21 Uhr

Also die Cookieeinstellungen in der web.config sehen so aus:

<sessionState cookieless="AutoDetect" mode="InProc" timeout="20">

cookieless

Optionales HttpCookieMode-Attribut.

Legt fest, wie Cookies für eine Webanwendung verwendet werden sollen.

Das cookieless -Attribut kann einen der folgenden möglichen Werte annehmen. Der Standardwert ist UseCookies.
Wert Beschreibung

AutoDetect

ASP.NET bestimmt, ob der anfordernde Browser oder das anfordernde Gerät Cookies unterstützt. Für den Fall, dass der anfordernde Browser oder das anfordernde Gerät Cookies unterstützt, verwendet AutoDetect Cookies zum Speichern von Benutzerdaten. Andernfalls wird ein Bezeichner in der Abfragezeichenfolge verwendet. Wenn der Browser oder das Gerät die Verwendung von Cookies unterstützt, Cookies aber momentan deaktiviert sind, werden von dem anfordernden Feature trotzdem Cookies verwendet.

UseCookies

Cookies werden zum Speichern von Benutzerdaten verwendet, unabhängig davon, ob der Browser oder das Gerät Cookies unterstützt.

UseDeviceProfile

ASP.NET bestimmt, ob basierend auf der HttpBrowserCapabilities-Einstellung Cookies verwendet werden. Wenn die HttpBrowserCapabilities-Einstellung angibt, dass der Browser oder das Gerät Cookies unterstützt, werden Cookies verwendet. Andernfalls wird ein Bezeichner in der Abfragezeichenfolge verwendet.

UseUri

Die aufrufende Funktion speichert einen Bezeichner in der Abfragezeichenfolge, unabhängig davon, ob der Browser oder das Gerät Cookies unterstützt.

Das verstehe ich nun nicht bei AutoDetect.
Warum werden trotz abgeschalteten Cookies im Browser trotzdem Cookies verwendet???
Geht doch dann gar nicht...

EDIT: Also Session.IsNewSession; ist jedes Mal true, selbst wenn ich cookieless auf true setze habe ich dasselbe komische o.G. Verhalten...

07.04.2010 - 13:21 Uhr

Hallöle.

Also folgendes Problem:

Ich erstelle in der global.asax bei Session_start 2 TCPClients und speichere diese als Objekte in 2 Sessionvariablen.

Die Session ID wird ja als Cookie gespeichert und die Daten im RAM abgelegt.
Schließe ich den Browser wird das Cookie gelöscht und bei einem erneuten Aufruf der Seite wird Session_Start wieder aufgerufen und die Sockets erstellt.
Navigiere ich durch die ASP.NET Anwendung, greife ich immer wieder die Sessionobjekte auf und sende Daten über die Sockets.

So weit so gut funktioniert das alles prima wie es sein soll.

Schalte ich im Browser jedoch die Cookies komplett ab. gibts Probleme:
Die Session ID wird in der URL angezeigt und von Seite zu Seite übertragen.
So weit so gut.

Nur habe ich das Problem, daß bei JEDEM Mausklick in der Applikation das Event Session_start aufgerufen wird und die beiden Sockets erstellt werden.

Bei jedem Mausklick.
Ist ja m.E. blödsinn, daß die Session ja per URl weitergegeben wird...und immer noch besteht.

Warum ist das so?

PS: Die Übergeben Session ID in der URL sieht etwas komisch aus:

(X(1)S(h3mmbm55mdmii4i4bqug1l55))

Woher kommt denn das X(1)?

29.03.2010 - 13:50 Uhr

Hier ist eine sehr gute Seite auf der der Lebenszyklus sehr genau und ausführlich beschrieben wird.
Mir hat es damals die Augen geöffnet!

Hoffe Dir hilfts auch weiter.

29.03.2010 - 09:09 Uhr

Hallo, also zumindest in meinem Fall handelt es sich um die Rückgabe eines boolean.
Eben dieser soll anzeigen, ob die Software online ist oder nicht und in der Anwendung eine grüne oder eine rote Ampel darstellen, das ist eig. schon alles.
Mir geht es darum die Anfragen an die Software zu reduzieren.

Mein Problem ist nur:

Ich hätte gerne, daß der WEbservice alle 5 oder 10 Sekunden bei der App Nachfragt, ob sie noch da ist.
Das Ergebnis soll in besagtem bollearn gespeichert werden.

Dieser boolean soll von der asp.net Anwendung abgefragt werden können.
Problem ist hierbei, daß ich einmal eine Instanz der Klasse erzeugen muss, damit ich jederzeit den boolean abfragen kann.
Wie macht man das?
DAS ist warscheinlich das unpraktikable an der ganzen Sache.

26.03.2010 - 13:12 Uhr

Nun, es sollte schon sein wie MarsStein dsa verstanden hat.
Vielen Dank Euch.

26.03.2010 - 11:47 Uhr

Okidoki...danke 👅

26.03.2010 - 11:30 Uhr

Hmm...ist das jetzt ernst gemeint, oder höre ich da eine gewisse Ironie heraus? ?(

26.03.2010 - 09:23 Uhr

Hello.
Mal ne Nachfragel ob das so praktikabel ist:

Also ich habe folgendes vor:

Ich erstelle einen Webservice der per Windows Socket alle paar Sekunden den Status einer Windows Software abfragt.
Er baut also einen Socket auf (oder halt nicht), schickt was an die Software, erhält eine Antwort (oder halt nicht), wartet 5 Sekunden und macht dasselbe.
Das Ergebnis wird per bool Variable gespeichert, welche die Clients abfragen können.

Der Webdienst soll ständig laufen, Tag und Nacht, 24/7.

Die Clients auf denen die Aspx.net Anwendung läuft fragen nun beim Webservice nach, ob die Windows Software noch läuft (bzw. der Socket noch online ist) und zeigen das in einem Updatepanel an.

Die Abfrage im Webservice muss also einmal angeschubst werden, am besten beim Start und läuft dann automatisch weiter.

Nun die Fragen:

Ist das so praktikabel?
Kann man das mit einem Timer im Webservice machen?

Hintergrund ist, daß nicht die Clients ständig bei der Software nachfragen und somit diese unnötig belasten, sondern daß eben der eine Webservice das macht und die Software so entlastet wird.
Würden 100 Clients alle 5 Sekunden bei der Software nachfragen, wäre das eine unnötige Belastung. Mit gehts dabei nicht um die Netzwerkbelastung, sondern um die Belastung der Software.

Danke mal für Anregungen von Euch erfahrenen Profis

17.03.2010 - 09:51 Uhr

Hallo, ich hoffe es kennt sich jemand ein bischen damit aus.
Ich packe einige Dateien, unter anderem auch leere (0Kb) mit ICSharpCode.

Später entpacke ich sie natürlich wieder und alles funktioniert m Prinzip wunderbar.
Habe ich jedoch in der Zip Datei eine leere Datei mitgepackt, kommt beim entpacken bei dieser Datei "unexpected EOF" und der Entpackvorgang wird abgebrochen.

Kennt jemand das Problem?
Wie kann man das lösen?
Es muss doch möglich sein auch leere Dateien zu entpacken (packen geht ja)

Danke schuppsl

05.03.2010 - 07:54 Uhr

Hallo Stefan, hab vielen Dank, das werde ich mir mal reinziehen.

04.03.2010 - 12:57 Uhr

Hallo mal wieder.

Ich möchte Fehlermeldungen (alle) in einer Messagebox ausgeben lassen.
Die Messagebox ist ein Usercontrol welches ich eben bei entsprechendem Fehler aufrufen,was auch gut funktioniert.

Nur ist das Problem, daß dies nur bei eigenen Exceptions funktioniert.
Also wenn ich jetzt per try, catch eine Fehler abfange kann ich im Catch z.b. oder weiter oben den Fehler anzeigen mit der Messagebox.

Ich möchte aber eine Zentrale stelle, an der alle Fehler gesammelt werden.
Das ist dann wohl Seession_Error.

Da Problem ist hier nun, daß ich von der Einstellung in der web.config abhängig bin.
Also entweder wird die standardseite bei einem Fehler angezeigt, oder ich gebe eine eigene Fehlerseite an.
Das funktioniert zwar auch alles, ist aber nicht das was ich will.

Ich möchte alle Fehler abfangen und in der Messagebox darstellen lassen.
Tritt also eiN Fehler auf, soll die aktuelle Seite wieder aufgerufen und die Messagebox dargestellt werden.

Das geht nicht, da ab Session_error immer auf die Errorseite weitergeleitet wird.

Hm..ich hoffe ich versteht mich =)

Wie kann ich das denn bewerkstelligen?
Eine Lösung wäre, daß ich alles alles alles per try-catch abfange und die MessageBox gleich im catch Zweig darstelle...ist aber ne riesen Arbeit und umständlich....

02.03.2010 - 08:12 Uhr

Hm...also in Request.Params ist das hiddenField aber net drin....
Und in Request.Form ist es drin, aber da stehen die Werte ja nicht drin:-)

01.03.2010 - 15:21 Uhr

Alles klar, danke.

01.03.2010 - 14:10 Uhr

das runat=server habe ich natürlich drin, es ist also sein Serversteuerlelement.
Ich muss mal ein paar Experimente starten, danke für Deine Antworten.
schupsl

01.03.2010 - 07:42 Uhr

Ok danke.
Aber leider wird das hiddenfield nicht wieder hergestellt....es ist leer.
Also kann ich den Wert nicht auslesen.

26.02.2010 - 14:31 Uhr

Hm...so habe ich das eigentlich schon versucht, hat aber nicht geklappt.
Aber gut, dann weiß ich daß das der richtige Weg ist, muss ich nur noch das Fehlerhein suchen...Danke!

26.02.2010 - 12:55 Uhr

Eine derartige Masterpage gibts leider nicht, deshalb wollte ich das eventuellen vorgehensweisen fragen.
Hätte ja sein können, daß es das eine Technik gibt.

Danke für Deine Einschätzung!