.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • ACHTUNG - NEUES BLOG

    Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
Download .NET Essentials Installer
Trickkiste

ASP.NET: Die PostBack-Falle

05.07.07 - .NET, ASP.NET
Beitrag von Norbert Eder
 Irgendwann tappt jeder in die PostBack-Falle. So ist es auch mir passiert und daher dieser kurze Eintrag zu diesem Thema. Der Beginn macht eine kurze Einführung.

Was ist ein PostBack


Unter einem PostBack versteht man das senden einer Seite zum Server unter Verwendung des HTTP-Vers Post. Die Eingaben der gesendeten Seite werden vom Server verarbeitet und eine neue Seite generiert. Die gesamte Seite wird neu geladen.

Konkretes Problem


Beim Laden einer Seite (vor allem wenn Werte zugewiesen werden) sollte daher abgefragt werden, ob es sich tatsächlich um ein PostBack handelt. Hier ein konkreter Fall:
protected void Page_Load(object sender, EventArgs e)
{
    FirstnameTextBox.Text = "Norbert";
    LastnameTextBox.Text = "Eder";
}

In diesem Fall wird ein PostBack nicht abgefragt. Nun werden beim Laden der Seite die vorhandenen Textfelder mit Werten befüllt. Werden diese verändert und wieder an den Server übertragen, werden die Änderungen beim neu Erstellen der Seite wieder überschrieben. Die geänderten Werte scheinen also am Client nicht mehr auf. Grund hierfür ist, dass die Daten in der Methode LoadPostData (siehe Lebenszyklen etwas weiter unten) geladen und im anschließenden Load-Event überschrieben werden. Anders sieht dies aus, wenn die Wertezuweisung durch die Abfrage bezgl. eines PostBacks gesichert wird:
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        FirstnameTextBox.Text = "Norbert";
        LastnameTextBox.Text = "Eder";
    }
}

In diesem Fall werden die Daten korrekt am Client angezeigt - nämlich die geänderten.

Zu guter Letzt möchte ich noch die unterschiedlichen Lebenszyklen einer Seite anführen, da sich diese durch ein PostBack verändern und darauf entsprechend Rücksicht genommen werden muss.

Lebenszyklen


Erster Aufruf
Die nachfolgenden Ereignisse bzw. Methoden werden beim initialen Aufruf einer Seite der Reihe nach abgearbeitet:

1. Init
2. Load
3. PreRender
4. SaveViewState
5. Render
6. Dispose
7. Unload

Bei einem PostBack
Bei einem PostBack erweitert sich der Lebenszyklus einer Seite geringfügig. Hier nun die neue Reihenfolge:

1. Init
2. LoadViewState
3. LoadPostData
4. Load
5. RaisePostDataChangedEvent
6. RaisePostBackEvent
7. PreRender
8. SaveViewState
9. Render
10. Dispose
11. UnLoad

Fazit


Es gilt sehr gut zu überlegen, in welchen Events welche Funktionalität ausgeführt werden soll. Hierfür, solange man sich noch nicht daran gewöhnt hat, regelmäßig einen Blick auf den Lebenszyklus werfen.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Die unterschiedlichen IDbParameter-Implementierungen

04.07.07 - .NET, Allerlei
Beitrag von Norbert Eder
 Was ich einfach einmal loswerden muss: Alles redet immer von Standard hin und Standard her. Und genau bei den kleinen und einfachen Dingen funktioniert das schon nicht. Warum müssen manche Hersteller unbedingt ihren eigenen Willen durchsetzen?

Beim einen DbProvider ist der "Parameter Char" ein @, dann wieder mal ein ? usw. Sogar innerhalb der Versionen wird hier geändert (siehe MySql). Sowas muss ja wirklich nicht sein.

Unter solchen Voraussetzungen braucht erst gar niemand über die Einhaltung von Standards sprechen ...

  1 Kommentar - 583 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


EXIF Informationen mit C# und Boardmitteln auslesen

03.07.07 - .NET, Grundlagen, Base Framework
Beitrag von Norbert Eder
 Neulich musste ich aus JPEG-Dateien EXIF-Daten auslesen. Hierzu gibt es unterschiedliche Möglichkeit. So kann man sich auf externe Bibliotheken verlassen, welche diese Funktionalität anbieten, oder es wird mit Hilfe der .NET 2.0+ Boardmittel umgesetzt. Ich habe mich für die zweite Variante entschieden, die zwar einen entscheidenden Nachteil mit sich bringt, der in meinem Fall jedoch nicht schlagend wurde: Performance.

So musste ich nur das Erstellungsdatum des Bildes auslesen (hier konnte ich nicht das Dateidatum heranziehen, da das Bild eventuell nachbearbeitet wurde). Das kann mit folgendem Code realisiert werden:
public class ExifReader
{
    public string ReadExifDate(Image image)
    {
        PropertyItem[] items = image.PropertyItems;
        foreach (PropertyItem pi in items)
        {
            if (pi.Id == 306)
            {
                string val = 
                    System.Text.Encoding.Default.GetString
                        (pi.Value);
                return val;
            }
        }
        return "n/a";
    }
}

Die Eigenschaft PropertyItem.Id repräsentiert grundlegend einen HEX-Wert, welcher angibt, welche Informationen sich im PropertyItem befinden. Dadurch könnte dieses Beispiel wesentlich erweitert werden. Sämtliche IDs sind unter dem angegebenen Link ersichtlich.

Der angegebene Nachteil besteht nun darin, dass für diese Variante, jedes Image (beispielsweise über Image.FromFile) geladen werden muss. Dies kostet jede Menge Performance. Deshalb sollte bei der Abarbeitung von großen und vor allem vielen Bildern diese Variante nicht herangezogen werden.

EXIF-Bibliotheken sollten durchaus einfach zu finden sein. Hier dennoch eine mögliche Library, die jedoch nicht auf Geschwindigkeit hin von mir getestet wurde:

EXIFextractor

  2 Kommentare - 9300 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


DasBackup 1.1.4 Final verfügbar

02.07.07 - Tools, DasBackup
Beitrag von Norbert Eder
  Ab sofort ist die Version 1.1.4 von DasBackup verfügbar. Dank der zahlreichen Unterstützung konnten sowohl neue Features implementiert, als auch die Usability an einigen Stellen deutlich verbessert werden.

Download DasBackup 1.1.4

Die neuen Features und die Änderungen können sowohl in der beigefügten Readme bezogen werden, als auch über den Artikel DasBackup 1.1.3 Beta 2 verfügbar.

Zu beachten ist, dass der gemeldete Synchronisations-Bug (siehe DasBackup: Fehlermeldung bei der Synchronisation) nun ebenfalls behoben wurde.

  Kommentar hinzufügen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


Artikel: Das Ziel ist die Konfiguration

29.06.07 - Blog-Intern
Beitrag von Norbert Eder
  Ein klein wenig Werbung muss manchmal sein: In der Ausgabe 04/07 der visual studio one ist wieder ein Artikel von mir zu finden. Diesmal beschäftige ich mich mit dem Thema Configuration Management. Neben einer Einführung in die Grundlagen, werden Tools aufgezählt, die bei der Umsetzung helfen, als auch konkrete Beispiele geliefert.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Weitere Tunings für Visual Studio 2005

28.06.07 - .NET, Visual Studio
Beitrag von Norbert Eder
 Im Beitrag Visual Studio 2005: Refactoring-Performance verbessern habe ich bereits einige Möglichkeiten genannt, Visual Studio 2005 performancemäßig zu verbessern. Hier nun weitere Optionen, die ein schnelleres Arbeiten ermöglichen:

Animationen deaktivieren: Animiertes kann unter Environment -- General -- Animate environment tools abgeschalten werden.

Startverhalten verändern: Unter Visual Studio 2005 schneller starten habe ich bereits gezeigt, wie der Splash-Screen deaktiviert werden kann. Eine weitere Möglichkeit die Performance zu verbessern besteht darin, die Start-Seite zu deaktivieren und Content-Download nicht durchführen zu lassen. Die entsprechenden Einstellungen finden sich unter Environment -- Startup. At Startup einfach auf 'Show empty environment' stellen und 'Download content every' deaktivieren.

Navigation-Bar ausblenden: Die Navigation-Bar zeigt alle in der gerade offenen Sourcecode-Datei enthaltenen Klassen und die dazugehörigen Methoden an. Wer Tools á la ReSharper verwendet, benötigt sie daher nicht und kann sie getrost ausblenden. Wieder ein wenig Performance-Gewinn. Zu finden unter Environment -- Text Editor -- All Languages -> Navigation Bar.

Toolbox und Eigenschaften-Fenster schließen: Wenn nicht benötigt und vor allem bei Formularen mit vielen Steuerelementen empfiehlt es sich, sowohl die Toolbox als auch das Eigenschaften-Fenster zu schließen. Durch das Verstecken werden die Fenster befüllt, daher komplett schließen und bei Bedarf wieder öffnen. Auch so läßt sich ein Performance-Gewinn herbeiführen.

Server-Explorer und Class-View: Wenn nicht benötigt, empfiehlt es sich auch, diese beiden Boxen zu schließen.

Es empfiehlt sich also generell alles zu schließen, das nicht benötigt wird.

  2 Kommentare - 1275 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


ISO Dateien mit Microsoft Tools mounten

28.06.07 - Kunterbunt
Beitrag von Norbert Eder
 Ob IsoBuster oder Daemon Tools. Viele benutzen 3rd Party Tools zum Öffnen von ISO Abbildern. In manchen Fällen dürfen aber entweder nur Boardmittel, oder Tools vom Betriebssystem-Hersteller verwendet werden.

Im Falle von Microsoft bietet sich hier das Virtual CD-ROM Control Panel for Windows XP an. Das Tool muss nicht installiert werden und durch das einfache Interface sollte man ohne Probleme damit klar kommen.


  2 Kommentare - 1433 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Alles über Threading in C#

27.06.07 - .NET, Grundlagen
Beitrag von Norbert Eder
 Gerade das Thema Threading wird immer wieder in Foren angesprochen. Zahlreiche Fragen finden sich dazu. Wer sich in das Thema einlesen möchte, oder ein kleines Online-Nachschlagewerk benötigt, dem sei folgender Link ans Herz gelegt:

Threading in C#

Da sollte wohl so ziemlich alles zu finden sein.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


ASP.NET: Web Controls dynamisch laden

27.06.07 - .NET, ASP.NET
Beitrag von Norbert Eder
 In vielen Situationen ist es notwendig, Web Controls dynamisch in einen Platzhalter (Placeholder-Control) zu laden. Dies kann sehr einfach bewerkstelligt werden:
this.ContentPlaceHolder.Controls.Clear();
this.ContentPlaceHolder.Controls.Add
    (
    LoadControl("modules/TestControl.ascx")
    );

Das Beispiel geht davon aus, dass Web Controls im Verzeichnis modules gespeichert sind. Beim ContentPlaceHolder handelt es sich um ein ContentHolder-Control.

Natürlich kann dies auch entsprechend dynamischer gestaltet werden, da sich das zu ladende Control eventuell aus dem aufgerufenen Menüeintrag oder anderen Informationen definieren läßt.

  1 Kommentar - 1535 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Akronyme der Softwareentwicklung

26.06.07 - Kunterbunt
Beitrag von Norbert Eder
 Gerade in der Softwareentwicklung häufen sich Akronyme. Für alles werden sie verwendet. Liebend gerne für (vermeintliche) Paradigmen. Sei es nun Test Driven Development (TDD) oder gar Asshole Driven Development. Einfach in einer ruhigen Minute durchlesen und die Kommentare nicht vergessen.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL



Zurück Weiter