<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET</title>
        <link>http://blog.codemurai.de/category/.NET.aspx</link>
        <description>.NET</description>
        <language>de-DE</language>
        <copyright>André Krämer</copyright>
        <generator>Subtext Version 2.6.0.1</generator>
        <item>
            <title>Software Legende Juval L&amp;ouml;wy am 8. Dezember in Koblenz</title>
            <link>http://blog.codemurai.de/archive/2010/12/07/software-legende-juval-lowy-am-8-dezember-in-koblenz.aspx</link>
            <description>&lt;p&gt;Am 8. Dezember hat unsere User Group in Koblenz mit Juval Löwy nach Tony Lombardo den zweiten internationalen Sprecher zu Gast.&lt;/p&gt;  &lt;p&gt;Juval wird bei uns seinen Vortrag “The Architect” halten, der für alle Software Architekten sowie Entwickler interessant ist.&lt;/p&gt;  &lt;p&gt;Da wir dieses Mal die Kapazitäten ein wenig besser planen müssen, bitten wir um eine formlose, kurze Anmeldung unter &lt;a href="mailto:dnug@konzeptum.de"&gt;dnug@konzeptum.de&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Das Treffen wird dieses Mal übrigens nicht bei Konzeptum, sondern ausnahmsweise bei der Görlitz AG statt finden. &lt;/p&gt;  &lt;p&gt;Weite Details zum Treffen gibt es auf der Homepage der &lt;a href="http://www.dnug-koblenz.de/jloewy.aspx"&gt;DNUG-Koblenz&lt;/a&gt;. Eine Anfahrtsbeschreibung zu Görlitz findet ihr &lt;a href="http://www.dnug-koblenz.de/AnfahrtG%C3%B6rlitzAG/tabid/189/language/de-DE/Default.aspx"&gt;hier&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5d3fd907-bfdd-41d1-853b-382e8f887523" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/.NET/default.aspx" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Community/default.aspx" rel="tag"&gt;Community&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/DNUG+Koblenz/default.aspx" rel="tag"&gt;DNUG Koblenz&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/120.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/12/07/software-legende-juval-lowy-am-8-dezember-in-koblenz.aspx</guid>
            <pubDate>Tue, 07 Dec 2010 10:54:10 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/12/07/software-legende-juval-lowy-am-8-dezember-in-koblenz.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/120.aspx</wfw:commentRss>
        </item>
        <item>
            <title>HTTP Fehler 401 beim hinzuf&amp;uuml;gen eines Custom WebParts</title>
            <link>http://blog.codemurai.de/archive/2010/11/21/http-fehler-401-beim-hinzufugen-eines-custom-webparts.aspx</link>
            <description>&lt;p&gt;Gestern überraschte mich Sharepoint mit einem mir zunächst vollkommen unverständlichen Verhalten.&lt;/p&gt;  &lt;p&gt;Ich versuchte zu einer Seite ein WebPart hinzuzufügen, welches ich kurz davor entwickelt hatte. Jedoch kam jedes Mal nachdem ich das Webpart auswählte ein Dialog der mich zur Eingabe von Benutzernamen und Passwort aufforderte. Meine korrekt eingegebenen Benutzerdaten akzeptierte der Dialog nicht. Der Klick auf “Abbrechen” führte schließlich zu einer Standard HTTP 401 Unauthorized Seite.&lt;/p&gt;  &lt;p&gt;Weder im Event-Log, noch in den Sharepoint-Logs konnte ich Informationen zur Fehlerursache finden. &lt;/p&gt;  &lt;p&gt;Also folgte einige Zeit der Ratlosigkeit und des Fluchens ehe ich mehr zufällig auf die Lösung kam:&lt;/p&gt;  &lt;p&gt;Ursache des Problems war eine fehlerhaft von mir implementierte Property meines Webparts. Diese sah ungefähr wie folgt aus:&lt;/p&gt;  &lt;pre class="brush: csharp; ruler: true;"&gt;private string pfad
public string Pfad
{
   get
   {
      return Pfad.EndsWith("/")?Pfad:string.Concat(Pfad,"/");
   }
   set
   {
      pfad = value;
   }
}&lt;/pre&gt;

&lt;p&gt;Wie man sieht habe ich einen kleinen, aber entscheidenden Fehler innerhalb des Getters. Anstatt mein Feld mit dem Namen &lt;em&gt;pfad&lt;/em&gt; zurück zu geben, gebe ich innerhalb des Getters der Eigenschaft &lt;em&gt;Pfad&lt;/em&gt; die Eigenschaft &lt;em&gt;Pfad&lt;/em&gt; zurück. Somit ruft diese Eigenschaft sich so lange selber auf, bis eine StackOverflowException auftritt.&lt;/p&gt;

&lt;p&gt;Diese StackOverflowException führte dazu, dass der Workerprozess meiner Sharepoint Web Applikation recycled wurde. Somit waren meine zuvor eingegebenen Credentials ungültig und der IIS fragte mich erneut nach den korrekten Zugangsdaten.&lt;/p&gt;

&lt;p&gt;Nachdem ich den Getter entsprechend korrigiert hatte, lies sich das Webpart problemlos einfügen.&lt;/p&gt;

&lt;pre class="brush: csharp; ruler: true;"&gt;private string pfad
public string Pfad
{
   get
   {
      return pfad.EndsWith("/")?pfad:string.Concat(pfad,"/");
   }
   set
   {
      pfad = value;
   }
}&lt;/pre&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d754bb5e-c966-41bb-bdc9-21785bfec0a9" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/.NET/default.aspx" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Sharepoint/default.aspx" rel="tag"&gt;Sharepoint&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/ASP.NET/default.aspx" rel="tag"&gt;ASP.NET&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/121.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/11/21/http-fehler-401-beim-hinzufugen-eines-custom-webparts.aspx</guid>
            <pubDate>Sun, 21 Nov 2010 22:56:21 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/11/21/http-fehler-401-beim-hinzufugen-eines-custom-webparts.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/121.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Die ASP.NET ObjectDataSource und abh&amp;auml;ngige Business Objekte</title>
            <link>http://blog.codemurai.de/archive/2010/07/14/die-asp-net-objectdatasource-und-abhangige-business-objekte.aspx</link>
            <description>&lt;p&gt;Ja, ich gebe es offen und ehrlich zu! Ich habe sie noch nie wirklich genutzt, die ASP.NET WebForms ObjectDataSource. Irgendwie hatte ich ein Unbehagen bei der Vorstellung mir das alles bloß zusammen zu klicken und habe daher bisher einen Bogen um die ObjectDataSource gemacht. Außerdem habe ich bisher auch noch niemanden getroffen, der ernsthaft in Erwägung gezogen hätte die ObjectDataSource zu nutzen - oder sich zumindest getraut hätte, dies zuzugeben ;-)&lt;/p&gt;  &lt;p&gt;Kürzlich war es dann aber soweit. meine Für eine kleine Demo startete ich damit, die serverseitige ASP.NET MVC Implementierung meiner Beispielanwendung für meinen jQuery Vortrag auf der dotnet Colgone nach Webforms zu konvertieren. Mein Ziel war es dabei, wo immer es nur geht, den WebForms "Baukasten" zu nehmen. Da ich bereits einen bestehenden Business Service hatte, der mir meine Objekte laden und persistieren konnte, kreuzte sie nun also meinen Weg, die ObjectDataSource.&lt;/p&gt;  &lt;p&gt;Nach ein paar Klicks durch den Wizzard und einem beherztem F5 bestätigte sich vorerst mein initiales Vorurteil: "Totaler Mist!".&lt;/p&gt;  &lt;p&gt;Mein Business Service hatte nämlich eine Abhängigkeit auf eine weitere Klasse, die für die  Datenhaltung zuständig war. Diese Abhängigkeit fand sich in meinem Quellcode in Form eines Konstruktor Parameters wieder. In meiner ASP.NET MVC Implementierung war der DI Container StructureMap für das Auflöösen dieser Abhängigkeit zuständig.&lt;/p&gt;  &lt;p&gt;Die WebForms Variante brach die Ausführung des Codes nun allerdings mit einer Exception ab und wies mich in freundlichem Gelb darauf hin, dass mein Business Objekt keinen parameterlosen Konstruktor hätte.&lt;/p&gt;  &lt;p&gt;In der Hoffnung, eine Factory für mein Business Objekt angeben zu können durchsuchte ich also die Eigenschaften der ObjectDataSource. Leider wurde ich nicht fündig, fluchte ein wenig darüber, dass meine Anforderung doch gar nicht so ungewöhnlich wäre und beendete Visual Studio frustriert.&lt;/p&gt;  &lt;p&gt;Glücklicherweise guckte ich ein wenig später doch noch mal nach einer Lösung. So kann zwar keine Eigenschaft für eine Factory angegeben werden, stattdessen wird jedoch ein Ereignis zur Verfügung gestellt, in dem ich das entsprechende Business Objekt erstellen und meiner ObjectDataSource zuweisen kann.&lt;/p&gt;  &lt;p&gt;Konkret sieht dies wie folgt aus:&lt;/p&gt;  &lt;pre class="brush: csharp"&gt;protected void AufgabenDataSource_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
   AufgabenService service = ObjectFactory.GetInstance&amp;lt;AufgabenService&amp;gt;
   e.ObjectInstance = service;
}&lt;/pre&gt;

&lt;p&gt;Nun habe ich über die ObjectFactory zwar einen direkten Verweis innerhalb meiner CodeBehind Datei auf den genutzten DI Container (in meinem Fall StructureMap), dies ist mir aber immer noch lieber, als die Abhängigkeit zur Persistenzschicht in meinem Business Service hart zu verdrahten.&lt;/p&gt;

&lt;h2&gt;Und die Moral von der Geschicht ...&lt;/h2&gt;

&lt;p&gt;... lautet: Erst ausprobieren und dann (gegebenenfalls) meckern ;-)&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c21c8263-7c63-4251-ab1e-0d9e2c368bc8" class="wlWriterSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/ASP.NET/default.aspx" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Webentwicklung/default.aspx" rel="tag"&gt;Webentwicklung&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/123.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/07/14/die-asp-net-objectdatasource-und-abhangige-business-objekte.aspx</guid>
            <pubDate>Wed, 14 Jul 2010 08:08:57 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/07/14/die-asp-net-objectdatasource-und-abhangige-business-objekte.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/123.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Deutsche Texte in Infragistics NetAdvantage 10.2</title>
            <link>http://blog.codemurai.de/archive/2010/07/01/deutsche-texte-in-infragistics-netadvantage-10-2.aspx</link>
            <description>&lt;p&gt;Wie &lt;a href="http://blogs.infragistics.com/blogs/craig_shoemaker/" target="_blank"&gt;Craig Shoemaker&lt;/a&gt; bereits in seinem &lt;a href="http://blogs.infragistics.com/blogs/craig_shoemaker/archive/2010/06/23/german-localized-strings-now-available-in-netadvantage-10-2.aspx" target="_blank"&gt;Blog geschrieben hat&lt;/a&gt;, werden die Infragistics NetAdvantage Controls für Silverlight und WPF ab der Version 10.2 auch mit Deutschen Oberflächentexten ausgeliefert. In diesem Beitrag möchte ich die Notwendigen Schritte noch einmal im Schnelldurchlauf in deutscher Sprache am Beispiel von Silverlight erläutern.&lt;/p&gt;  &lt;h2&gt;Initiales Setup&lt;/h2&gt;  &lt;p&gt;Mein Silverlightprojekt besteht aus einer einzigen Seite, in der ein XamGrid definiert wurde:&lt;/p&gt;  &lt;pre class="brush: xml"&gt;&amp;lt;UserControl x:Class="NAGermanLocalization1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" xmlns:ig="http://schemas.infragistics.com/xaml"&amp;gt;

    &amp;lt;Grid x:Name="LayoutRoot" Background="White"&amp;gt;
        &amp;lt;ig:XamGrid HorizontalAlignment="Left" Name="xamGrid1" VerticalAlignment="Top"  AutoGenerateColumns="false"  &amp;gt;
            &amp;lt;ig:XamGrid.FilteringSettings&amp;gt;
                &amp;lt;ig:FilteringSettings AllowFiltering="FilterMenu" /&amp;gt;
            &amp;lt;/ig:XamGrid.FilteringSettings&amp;gt;
            &amp;lt;ig:XamGrid.GroupBySettings&amp;gt;
                &amp;lt;ig:GroupBySettings AllowGroupByArea="Top" /&amp;gt;
            &amp;lt;/ig:XamGrid.GroupBySettings&amp;gt;
            &amp;lt;ig:XamGrid.Columns&amp;gt;
                &amp;lt;ig:TextColumn Key="Id" /&amp;gt;
                &amp;lt;ig:TextColumn Key="Name"/&amp;gt;
                &amp;lt;ig:TextColumn Key="Vorname"/&amp;gt;
                &amp;lt;ig:TextColumn Key="Land" /&amp;gt;
            &amp;lt;/ig:XamGrid.Columns&amp;gt;
        &amp;lt;/ig:XamGrid&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/UserControl&amp;gt;&lt;/pre&gt;

&lt;p&gt;Für das Grid habe ich wie der vorherige Codeausschnitt zeigt Filtern und Gruppieren aktiviert.&lt;/p&gt;

&lt;p&gt;Meine Codebehind Datei sieht ähnlich schmal aus:&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;using System.Collections.Generic;
using System.Windows.Controls;

namespace NAGermanLocalization1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            InitGrid();
        }

        private void InitGrid()
        {
 	        List&amp;lt;Kunde&amp;gt; kunden = new List&amp;lt;Kunde&amp;gt;();
            for (int i = 0; i&amp;lt;10; i++)
            {
                Kunde kunde = new Kunde{Id = i, Name = string.Format("Name {0}", i), Vorname = string.Format("Vorname {0}", i), Land = "DE"};
                kunden.Add(kunde);
            }
            xamGrid1.ItemsSource = kunden;
        }
    }

    public class Kunde
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Vorname { get; set; }
        public string Land { get; set; }
    }
}&lt;/pre&gt;

&lt;p&gt;An der Oberfläche schaut das ganze nun wie folgt aus:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codemurai.de/images/DeutscheTexteinInfragisticsNetAdvantag.2_14FDF/GridVorher.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="GridVorher" src="/images/localhost/GridVorher_thumb.png" width="244" height="149" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codemurai.de/images/DeutscheTexteinInfragisticsNetAdvantag.2_14FDF/DialogVorher.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="DialogVorher" src="/images/localhost/DialogVorher_thumb.png" width="244" height="110" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Und einmal auf Deutsch bitte ...&lt;/h2&gt;

&lt;p&gt;Um das ganze nun zu lokalisieren, sind lediglich zwei Schritte erforderlich.&lt;/p&gt;

&lt;p&gt;Zunächst muss das Silverlight Projekt entladen und anschließend im Textmodus editiert werden:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codemurai.de/images/DeutscheTexteinInfragisticsNetAdvantag.2_14FDF/unloadproject.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="unloadproject" src="/images/localhost/unloadproject_thumb.png" width="207" height="244" /&gt;&lt;/a&gt; &lt;a href="http://blog.codemurai.de/images/DeutscheTexteinInfragisticsNetAdvantag.2_14FDF/editproject.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="editproject" src="/images/localhost/editproject_thumb.png" width="244" height="97" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Der vorhandene leere Tag &lt;em&gt;SupportedCultures&lt;/em&gt; muss mit dem Wert &lt;em&gt;de&lt;/em&gt; versehen werden.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codemurai.de/images/DeutscheTexteinInfragisticsNetAdvantag.2_14FDF/supportedcultures.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="supportedcultures" src="/images/localhost/supportedcultures_thumb.png" width="244" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Anschließend muss die Projektdatei gespeichert und erneut geladen werden. Als letzter Schritt muss dann innerhalb der Webseite, die das Silverlight Control hostet noch die Zeile &lt;em&gt;&amp;lt;param name="uiculture" value="de" /&amp;gt;&lt;/em&gt; innerhalb des Object Tags eingefügt werden:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codemurai.de/images/DeutscheTexteinInfragisticsNetAdvantag.2_14FDF/uiculture.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="uiculture" src="/images/localhost/uiculture_thumb.png" width="244" height="90" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Wenn nun nichts schief gegangen ist, sollten die Oberflächentexte nun auf Deutsch erscheinen:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codemurai.de/images/DeutscheTexteinInfragisticsNetAdvantag.2_14FDF/GridNachher.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="GridNachher" src="/images/localhost/GridNachher_thumb.png" width="244" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codemurai.de/images/DeutscheTexteinInfragisticsNetAdvantag.2_14FDF/DialogNachher.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="DialogNachher" src="/images/localhost/DialogNachher_thumb.png" width="244" height="122" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Fazit&lt;/h2&gt;

&lt;p&gt;Lokalisierte Oberflächen werden mit Infragistics NetAdvantage 10.2 zum Kinderspiel, da das umständliche Setzen der Oberflächentexte über die &lt;a href="http://help.infragistics.com/NetAdvantage/WPF/2010.2/CLR4.0/?page=WPF_Customize_Assembly_Resource_Strings.html" target="_blank"&gt;runtime resource-string customization&lt;/a&gt; in Zukunft entfällt.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:61559608-abe9-41f5-a2fb-64fc37e04cbb" class="wlWriterSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/Infragistics/default.aspx" rel="tag"&gt;Infragistics&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Silverlight/default.aspx" rel="tag"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Localization/default.aspx" rel="tag"&gt;Localization&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/124.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/07/01/deutsche-texte-in-infragistics-netadvantage-10-2.aspx</guid>
            <pubDate>Thu, 01 Jul 2010 00:53:59 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/07/01/deutsche-texte-in-infragistics-netadvantage-10-2.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/124.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Hattrick!</title>
            <link>http://blog.codemurai.de/archive/2010/06/15/hattrick.aspx</link>
            <description>&lt;p&gt;Passend zur Fußball WM konnte ich einen virtuellen Hattrick landen. Kürzlich ist nämlich mein dritter Artikel in Folge auf der deutschen ASP.NET Site &lt;a href="http://www.asp.net/de"&gt;http://www.asp.net/de&lt;/a&gt; veröffentlicht worden. Cool :-)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.codemurai.de/images/Hattrick_94BF/aspnet_de.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="aspnet_de" src="/images/localhost/aspnet_de_thumb.png" width="244" height="175" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Nachdem ich die Artikel des Tages nun also "gestürmt" habe, frage ich mich nur noch, wie ich mein Blog in den Feed links bekomme ...&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ec9cc367-5349-428d-8372-317be5773069" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/.NET/default.aspx" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/ASP.NET/default.aspx" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Community/default.aspx" rel="tag"&gt;Community&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Ver%c3%b6ffentlichungen/default.aspx" rel="tag"&gt;Veröffentlichungen&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/125.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/06/15/hattrick.aspx</guid>
            <pubDate>Tue, 15 Jun 2010 00:32:46 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/06/15/hattrick.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/125.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Mein jQuery Vortrag auf der dotnet Cologne</title>
            <link>http://blog.codemurai.de/archive/2010/06/01/mein-jquery-vortrag-auf-der-dotnet-cologne.aspx</link>
            <description>&lt;p&gt;Das Beispielprojekt meines jQuery Vortrags während der dotnet Cologne kann ab sofort &lt;a title="André Krämers jQuery und ASP.NET MVC Beispielprojekt der dotnet Cologne" href="http://www.codemurai.de/downloads/akraemer_jquery.zip" target="_blank"&gt;hier&lt;/a&gt; herunter geladen werden.&lt;/p&gt;  &lt;p&gt;Es handelt sich dabei um ein kleines ASP.NET MVC 2 Projekt, in dem folgendes genutzt wurde:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ASP.NET MVC 2 ;-) &lt;/li&gt;    &lt;li&gt;StructureMap als IOC Container &lt;/li&gt;    &lt;li&gt;SQLite als leichtgewichtige In-Memory-DB &lt;/li&gt;    &lt;li&gt;NHibernate für den Datenbankzugriff &lt;/li&gt;    &lt;li&gt;jQuery für den Wow-Faktor ;-) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Die Solution liegt passend zur Veranstaltung im VS 2010 Format vor. Bei Bedarf kann ich aber auch eine VS 2008 Solution bereit stellen.&lt;/p&gt;  &lt;p&gt;Hauptaugenmerk solltet ihr auf die Datei aufgabenlist.js setzen. Hier befindet sich der relevante jQuery / JavaScript Code. Der ganze Rest ist nur "Infrastruktur", damit ich jQuery an einem halbwegs realistischen Beispiel zeigen kann ;-)&lt;/p&gt;  &lt;p&gt;An Feedback zu den Quellcodes bin ich immer interessiert. Am besten über das Kontaktformular, oder die während des Vortrags mitgeteilte E-Mail Adresse.&lt;/p&gt;  &lt;p&gt;Ich weiß übrigens, dass das ASP.NET MVC Projekt keine Unit Tests beinhaltet. Angesichts der Projektgröße und der verfügbaren Zeit habe ich hier ein wenig geschludert. &lt;a href="http://blog.thomasbandt.de/39/de/blog.html" target="_blank"&gt;Thomas Bandt&lt;/a&gt; hat mich während des Vortrags übrigens auch darauf aufmerksam gemacht, dass mein JavaScript Code nicht via Unit Tests geprüft wurde. Auch hier gelobe ich Besserung :-)&lt;/p&gt;  &lt;h2&gt;Literaturempfehlungen&lt;/h2&gt;  &lt;p&gt;Im Anschluss an den Vortrag wurde ich außerdem gefragt, welche Literatur ich zu dem Thema empfehlen könnte.&lt;/p&gt;  &lt;p&gt;Nun, da sich jQuery hauptsächlich mit der Modifikation des DOMs, insbesondere dem Ein- / Ausblenden sowie dynamischem CSS befasst, sollte man meiner Meinung nach zunächst über solide (X)HTML und CSS Kenntnisse verfügen (kein Witz).&lt;/p&gt;  &lt;p&gt;Zu diesem Thema kann ich das Buch Head First HTML with CSS &amp;amp; XHTML empfehlen:&lt;/p&gt; &lt;iframe style="width: 120px; height: 240px" marginheight="0" src="http://rcm-de.amazon.de/e/cm?t=codemurai-21&amp;amp;o=3&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=059610197X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Außerdem können generelle JavaScript Kenntnisse auch nicht schaden ;-) Hier habe ich persönlich sehr gute Erfahrung mit dem Buch Professional JavaScript for Web Developers gemacht.&lt;/p&gt; &lt;iframe style="width: 120px; height: 240px" marginheight="0" src="http://rcm-de.amazon.de/e/cm?t=codemurai-21&amp;amp;o=3&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=047022780X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Speziell zum Thema jQuery hat mir das Buch &lt;em&gt;&lt;a href="http://www.manning.com/bibeault2/" target="_blank"&gt;jQuery in Action, Second Edition&lt;/a&gt;&lt;/em&gt; sehr gut gefallen. Ich habe es mir im Rahmen des Manning Early Access Program als E-Book bestellt. Wer lieber ein gedrucktes Exemplar haben möchte, muss sich noch ein wenig gedulden, kann es aber dann auch z. B. bei Amazon bestellen.&lt;/p&gt; &lt;iframe style="width: 120px; height: 240px" marginheight="0" src="http://rcm-de.amazon.de/e/cm?t=codemurai-21&amp;amp;o=3&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=1935182323&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;    &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:765ddd0d-f614-4316-8867-2bf89f0098f9" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/.NET/default.aspx" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/ASP.NET/default.aspx" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Community/default.aspx" rel="tag"&gt;Community&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/jQuery/default.aspx" rel="tag"&gt;jQuery&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Lernen/default.aspx" rel="tag"&gt;Lernen&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Vortr%c3%a4ge/default.aspx" rel="tag"&gt;Vorträge&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/126.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/06/01/mein-jquery-vortrag-auf-der-dotnet-cologne.aspx</guid>
            <pubDate>Tue, 01 Jun 2010 00:25:11 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/06/01/mein-jquery-vortrag-auf-der-dotnet-cologne.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/126.aspx</wfw:commentRss>
        </item>
        <item>
            <title>dotnet Cologne 2010 - was ein riesen Spa&amp;szlig;</title>
            <link>http://blog.codemurai.de/archive/2010/06/01/dotnet-cologne-2010-was-ein-riesen-spa.aspx</link>
            <description>&lt;p&gt;Letzten Freitag hatte ich die Freude, an der &lt;a href="http://dotnet-cologne.de" target="_blank"&gt;dotnet Cologne&lt;/a&gt; teilzunehmen. Mit über 300 Teilnehmern war es ein wirklich riesiges Event, dass sich vor "professionellen", oder besser gesagt kommerziellen Konferenzen nicht verstecken muss.&lt;/p&gt;  &lt;h2&gt;Der Teilnehmer&lt;/h2&gt;  &lt;p&gt;Vor Ort war ich in mehreren Rollen. Zum einen natürlich als Teilnehmer. In dieser Rolle nutzte ich die Möglichkeit, endlich mal die Gesichter zu einigen Bekannten aus der Community zu sehen und auch mal persönlich das ein oder andere Wort zu wechseln. Außerdem hörte ich mir auch spannende Vorträge, unter anderem von &lt;a href="http://dotnet-cologne.de/Sprecher.ashx#J%C3%B6rg.Krause" target="_blank"&gt;Jörg Krause&lt;/a&gt; zu &lt;a href="http://dotnet-cologne.de/Vortraege.ashx#SP-Dev" target="_blank"&gt;Sharepoint als Entwicklungsplattform&lt;/a&gt;, &lt;a href="http://dotnet-cologne.de/Vortraege.ashx#SL4" target="_blank"&gt;Neues in Silverlight 4&lt;/a&gt; von &lt;a href="http://dotnet-cologne.de/Sprecher.ashx#Stefan.Lange" target="_blank"&gt;Stefan Lange&lt;/a&gt; sowie &lt;a href="http://dotnet-cologne.de/Vortraege.ashx#WebForms4" target="_blank"&gt;Neues in ASP.NET 4.0&lt;/a&gt; von &lt;a href="http://dotnet-cologne.de/Sprecher.ashx#Jan.Welker" target="_blank"&gt;Jan Welker&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Irritierend fand ich, dass gefühlte 90 % der Besucher von Jörg Krauses Sharepoint Vortrag keinerlei Sharepoint Vorkenntnisse hatten und somit wohl nicht im geringsten wussten, wie so eine Site, eine Sitecollection, ein Web, eine Liste, ein Webpart ... an der Oberfläche wohl aussehen. Die gleiche Situation habe ich übrigens auch mehrfach schon auf der Shareconnect (Basta Sharepoint Days) beobachtet. Vielleicht wäre hier einfach mal ein "Was ich über Sharepoint wissen sollte, bevor ich Visual Studio aufmache" Vortrag angebracht. Leider habe ich einen solchen Vortrag bisher noch auf keiner (Entwickler-)Konferenz im Angebot gesehen. Nichts desto trotz fand ich Jörgs Vortrag prima! Auch die anderen besuchten Vorträge haben mir gut gefallen, daher mein Fazit als Teilnehmer:&lt;/p&gt;  &lt;p&gt;Voller Erfolg! Gute Vorträge, gute Kontaktmöglichkeiten zur Community, was will man mehr.&lt;/p&gt;  &lt;h2&gt;Der Aussteller&lt;/h2&gt;  &lt;p&gt;Unter den Sponsoren des Events war unter anderem auch die Firma &lt;a href="http://www.infragistics.com" target="_blank"&gt;Infragistics&lt;/a&gt;. Wie auch auf anderen Konferenzen lies ich es mir als fleißiger &lt;a href="http://blogs.infragistics.com/blogs/mvps/archive/2010/05/17/introducing-infragistics-mvp-andr-233-kr-228-mer.aspx" target="_blank"&gt;Infragistics MVP&lt;/a&gt;  in den Pausen natürlich nicht nehmen, &lt;a href="http://blogs.infragistics.com/blogs/kiril_matev/default.aspx" target="_blank"&gt;Kiril&lt;/a&gt; und Nils tatkräftig zu unterstützen. Dies war auch bitter nötig, da der Andrang am Stand weit höher war, als ich es von anderen Konferenzen gewohnt war. Kamen wir normalerweise zu zweit immer ganz gut zurecht, waren dieses Mal sogar drei Personen eigentlich schon fast zu wenig.&lt;/p&gt;  &lt;p&gt;Fazit als Aussteller: Tolle Veranstaltung! Viele Kontakte, interessante und zum Teil sogar sehr trickreiche Fragen, genauso muss es sein!&lt;/p&gt;  &lt;h2&gt;Der User Group Leader&lt;/h2&gt;  &lt;p&gt;Jeder der schon mal ein User Group Treffen besucht hat wird sich sicherlich fragen:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Wo kommen eigentlich die Sprecher her?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Nun ja, als sie ganz klein waren, wird sie voraussichtlich einer der beiden hier unten gebracht haben.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.codemurai.de/images/dotnetCologne2010waseinriesenSpa_14431/image.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="/images/localhost/image_thumb.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Foto: &lt;a href="http://www.flickr.com/photos/valter/"&gt;&lt;b&gt;Valter Jacinto | Portugal&lt;/b&gt;&lt;/a&gt;   &lt;a title="http://www.flickr.com/photos/valter/87429062/sizes/m/" href="http://www.flickr.com/photos/valter/87429062/sizes/m/"&gt;http://www.flickr.com/photos/valter/87429062/sizes/m/&lt;/a&gt;       &lt;br /&gt;Creative Commons License&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Irgendwann werden die Jungs und Mädels dann aber groß und spätestens dann stellt sich für einen User Group Leiter die Frage: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Wo bekomme ich eigentlich Sprecher her?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ein besonders guter Ort, Sprecher für die eigene User Group zu finden ist selbstverständlich eine Konferenz, denn dort treten Speaker häufig in Rudeln auf ;-)&lt;/p&gt;  &lt;p&gt;Also machte ich mich während der dotnet Cologne auf den Weg und zog Sprecher für die nächsten Treffen der .&lt;a href="http://www.dnug-koblenz.de" target="_blank"&gt;NET User Group Koblenz&lt;/a&gt; an Land.&lt;/p&gt;  &lt;p&gt;Die Ausbeute war übrigens mit zwei definitiven, einer relativ verbindlichen und einer losen Zusage recht gut. Daher auch hier: dotnet Cologne, 12 Points ;-)&lt;/p&gt;  &lt;h2&gt;Der Sprecher&lt;/h2&gt;  &lt;p&gt;Zu guter letzt (und angesichts der Agenda ist dies wörtlich gemeint), war ich auch als Sprecher unterwegs. &lt;a href="http://dotnet-cologne.de/Sprecher.ashx#Andre.Kraemer" target="_blank"&gt;Mein&lt;/a&gt; Thema war die &lt;a href="http://dotnet-cologne.de/Vortraege.ashx#jQuery" target="_blank"&gt;Einführung in jQuery&lt;/a&gt; unter dem spontan geänderten Titel:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;jQuery - oder warum Sie JavaScript in Zukunft nicht mehr hassen werden.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Den Verlauf des Vortrags würde ich wie folgt beschreiben&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Der Saal füllt sich, die Menge wird still. Ich will loslegen, aber mein Mikro überlegt sich, dass es sich lieber in meinem T-Shirt verdreht. Kein Mensch hört mich ... so ein Mist &lt;/li&gt;    &lt;li&gt;Mikro Problem gelöst, schnell durch die Folien gejagt. Auf gehts zur Demo! &lt;/li&gt;    &lt;li&gt;Meine ASP.NET MVC Anwendung reißt niemand vom Hocker und stößt kaum auf Interesse &lt;/li&gt;    &lt;li&gt;Ist zum Glück nicht schlimm, schließlich ist mein Thema ja auch jQuery und nicht ASP.NET MVC ;-) &lt;/li&gt;    &lt;li&gt;Die ersten UI Gimmicks (alternierende Tabellenzeilen, Hover Effekte) zaubern ein müdes Lächeln auf die Gesichter der Menge - da muss wohl noch mehr her &lt;/li&gt;    &lt;li&gt;Ich erstelle mit einer Zeile jQuery Code auf- und zuklappbare Bereiche in der Sidebar der Anwendung. Im Publikum sehe ich die ersten funkelnden Augen &lt;/li&gt;    &lt;li&gt;Auf der Welle muss ich weiter reiten, also jetzt schnell ein wenig Ajax;-) &lt;/li&gt;    &lt;li&gt;In der Einleitung habe ich etwas vom Update Panel erzählt. Heißt dann wohl ich sollte auch ein wenig WebForms zeigen. Ich entschließe mich also, im Firebug mal zu zeigen, was über die Leitung geht wenn man Ajax mit dem Update Panel &lt;strike&gt;erlegt&lt;/strike&gt; erledigt. Als ich zum ViewState scrolle scheinen einige Teilnehmer zu glauben ich hätte gerade die Matrix gehacked oder zumindest gedebugged. &lt;/li&gt;    &lt;li&gt;Oh je, nur noch 3 Minuten Zeit und ich habe doch versprochen früher Schluss zu machen - jetzt muss schnell etwas großartiges her. Ich greife also noch mal in die Trickkiste und greife zu meinem größten Trumpf:      &lt;br /&gt;&lt;strong&gt;runde Ecken;-)        &lt;br /&gt;&lt;/strong&gt;Puh, geschafft, die Zuschauer jubeln. Ein Glück, dass es runde Ecken gibt ;-) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Mein Fazit als Sprecher lautet also:&lt;/p&gt;  &lt;p&gt;Wahnsinn! Auch wenn es nur ein Einsteiger Vortrag war und laut Handzeichen mindestens die Hälfte der Anwesenden jQuery bereits kannte und nutzte war das Publikum allem Anschein nach während des Vortrags voll dabei. So macht vortragen Spaß!&lt;/p&gt;  &lt;h2&gt;Der Grillfreund&lt;/h2&gt;  &lt;p&gt;Zum Abschluss fand für einige Teilnehmer, Sprecher und Sponsoren dann noch die durch Microsoft gesponsorte und durch Jan Welker gestifftete Grill-Party des dotnet Forums statt. Essen und Getränke waren sehr lecker, die Gespräche spannend, von daher auch hier mein Kompliment.&lt;/p&gt;  &lt;h2&gt;Fazit&lt;/h2&gt;  &lt;p&gt;Der Besuch der dotnet Cologne hätte in keinster Weise besser laufen können. Großes Lob und alle Achtung an die Organisatoren! Nächstes Jahr bin ich - in welcher Form auch immer - sicherlich auch wieder mit dabei!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Hey, du hast dir die Zeit genommen, den ganzen Beitrag zu lesen, oder zumindest bis hier hin zu scrollen. Nimm dir doch bitte auch noch die Zeit, ihn über den unten stehenden Button bei dotnet-kicks.de zu kicken!&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blog.codemurai.de/aggbug/127.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/06/01/dotnet-cologne-2010-was-ein-riesen-spa.aspx</guid>
            <pubDate>Tue, 01 Jun 2010 00:03:46 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/06/01/dotnet-cologne-2010-was-ein-riesen-spa.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/127.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ein zweites Zuhause</title>
            <link>http://blog.codemurai.de/archive/2010/05/23/ein-zweites-zuhause.aspx</link>
            <description>&lt;p&gt;Habe ich für meine Blog Beiträge gefunden. Zumindest die englischen, die einen Bezug zu den &lt;a title="NetAdvantage for .NET" href="http://www.infragistics.com/dotnet/netadvantage.aspx" target="_blank"&gt;Infragistics NetAdvantage Controls&lt;/a&gt; haben. &lt;/p&gt;  &lt;p&gt;Seit kurzem gibt auf der Infragistics Homepage nämlich &lt;a title="Infragistics MVPs" href="http://blogs.infragistics.com/blogs/mvps/default.aspx" target="_blank"&gt;einen MVP Blog&lt;/a&gt;, für das ich einer der Autoren bin.&lt;/p&gt;  &lt;p&gt;Selbstverständlich gibt es auch schon einen &lt;a title="Introducing Infragistics MVP André Krämer" href="http://blogs.infragistics.com/blogs/mvps/archive/2010/05/17/introducing-infragistics-mvp-andr-233-kr-228-mer.aspx" target="_blank"&gt;ersten Blog Post von mir&lt;/a&gt;. Dieser beinhaltet neben einer kurzen (OK, langen ;-)) Vorstellung ein kleines jQuery Script, welches hilfreich beim Einsatz des Infragistics ASP.NET Aikido WebDropdown Controls ist.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.codemurai.de/images/EinzweitesZuhause_E6B7/igmvpblog.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="igmvpblog" src="/images/localhost/igmvpblog_thumb.png" width="244" height="131" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:60231d41-80be-4142-957a-819716f52cd9" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/ASP.NET/default.aspx" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Infragistics/default.aspx" rel="tag"&gt;Infragistics&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Community/default.aspx" rel="tag"&gt;Community&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/jQuery/default.aspx" rel="tag"&gt;jQuery&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/128.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/05/23/ein-zweites-zuhause.aspx</guid>
            <pubDate>Sun, 23 May 2010 17:24:47 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/05/23/ein-zweites-zuhause.aspx#feedback</comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/128.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Was hast du vor 10 Jahren programmiert</title>
            <link>http://blog.codemurai.de/archive/2010/05/18/was-hast-du-vor-10-jahren-programmiert.aspx</link>
            <description>&lt;p&gt;Vor ein paar Wochen haben unter anderem &lt;a href="http://blogs.msdn.com/dparys/archive/2010/03/05/was-hast-du-vor-ber-zehn-jahren-programmiert.aspx" target="_blank"&gt;Darius&lt;/a&gt;, &lt;a href="http://blog.alexonasp.net/post/2010/03/05/Was-hast-Du-vor-uber-zehn-Jahren-programmiert.aspx" target="_blank"&gt;Alex&lt;/a&gt; und &lt;a href="http://blog.thomasbandt.de/39/2324/de/blog/re-was-hast-du-vor-ueber-zehn-jahren-programmiert.html" target="_blank"&gt;Thomas&lt;/a&gt; darüber geblogged, was sie vor 10 Jahren programmiert haben.&lt;/p&gt;  &lt;p&gt;Natürlich kam ich auch ins Grübeln und so fiel mir ein, dass ich zu dieser Zeit meine Zeit meist mit VB 6 Desktop Anwendungen, Outlook Formularanwendungen, oder aber PHP oder Classic ASP Webanwendungen verbracht habe. Allerdings habe ich seitdem mehrfach den Arbeitgeber gewechselt und die Source Codes daher auch nicht mehr im Zugriff. Somit war das Thema, einen Blogeintrag zu dieser Frage zu schreiben für mich eigentlich erledigt.&lt;/p&gt;  &lt;h2&gt;Eigentlich ...&lt;/h2&gt;  &lt;p&gt;Aber auch nur eigentlich, denn lustigerweise schickte mir letzte Woche ein ehemaliger Kollege aus heiterem Himmel einen alten Screenshot, den er irgendwo gefunden hatte.&lt;/p&gt;  &lt;p&gt;Bei diesem Screenshot handelte es sich um einen Gag Screen einer Anwendung, die wir 1999 für die Finanzbuchhaltung der Nürburgring GmbH geschrieben hatten. Das Bild öffnete sich übrigens, wenn ich mich recht erinnere beim Klick auf ein Label. In den vier Jahren, in denen ich die Anwendung anschließend noch weiter betreut habe, kam allerdings nie eine Anfrage zu dieser Bildschirmmaske. Daher gehe ich mal davon aus, dass es niemand gefunden hat :-)&lt;/p&gt;  &lt;p&gt;Auf dem Bild zu sehen sind übrigens mein damaliger Kollege, der ein ehemaliger Schulkamerad und mein späterer WG Mitbewohner war, und ich. Das Bild wurde allerdings nicht während der Arbeit, sondern während eine Pre-Game Grill Party eines Spiels der Frankfurt Galaxy aufgenommen. Zu rätseln, wer von uns beiden wer ist, überlasse ich den Lesern dieses Blogs.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.codemurai.de/images/Washastduvor10Jahrenprogrammiert_146B8/programmierer.jpg"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="programmierer" src="/images/localhost/programmierer_thumb.jpg" width="244" height="242" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Schöne Erinnerung! Vielen Dank für das Bild Oliver!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0094e035-e48d-489a-b288-6d7f2f4d780e" class="wlWriterSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/Community/default.aspx" rel="tag"&gt;Community&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Fun/default.aspx" rel="tag"&gt;Fun&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/129.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/05/18/was-hast-du-vor-10-jahren-programmiert.aspx</guid>
            <pubDate>Tue, 18 May 2010 00:14:13 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/05/18/was-hast-du-vor-10-jahren-programmiert.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/129.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Lebendige ASP.NET Webseiten mit jQuery</title>
            <link>http://blog.codemurai.de/archive/2010/05/04/lebendige-asp-net-webseiten-mit-jquery.aspx</link>
            <description>&lt;p&gt;Moderne Webseiten beinhalten in der heutigen Zeit einen hohen Anteil clientseitiger Quellcodes in Form von JavaScript. Für diesen Anwender führt dies im Idealfall zu einer verbesserten Benutzbarkeit der Applikation, da diese neben netten UI Effekten nun meist durch Ajax auch weitaus flüssiger bedienbar ist.&lt;/p&gt;  &lt;p&gt;Bei vielen Entwicklern solcher dynamischer Webseiten führt der vermehrte JavaScript Anteil allerdings häufig zu Wein- und/oder Schreikrämpfen, denn nur die wenigsten mögen JavaScript wirklich. Die Ursachen für diese Antipathie liegen jedoch selten an JavaScript als Sprache selbst, sondern in den meisten Fällen eher an der unterschiedlichen Implementation des DOMs / BOMs durch die verschiedenen Browserhersteller. Diese Inkonsistenz führt nämlich dazu, dass JavaScript Code, der in einem Browser bzw. einer Version eines Browsers problemlos läuft im nächsten Browser Fehler verursacht und schlichtweg nicht läuft.&lt;/p&gt;  &lt;p&gt;Weiter wird häufig bemängelt, das Selektionen fernab von einem einfachen &lt;em&gt;document.getElementById(IdMeinesElements)&lt;/em&gt; relativ kompliziert sind. Als Beispiel wären hier zu nennen: alle Elemente mit einer bestimmten Klasse, ungerade Zeilen einer Tabelle, das aktivierte Element einer RadioButtonGroup usw.&lt;/p&gt;  &lt;h2&gt;Und nun?&lt;/h2&gt;  &lt;p&gt;Nun gibt es folgende Strategien mit diesen Problemen umzugehen:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Man drückt sich immer davor JavaScript zu schreiben und wälzt dies auf einen Kollegen ab &lt;/li&gt;    &lt;li&gt;Man kopiert sich irgendwoher JavaScript Codeschnippsel, die angeben browserunabhängig zu sein und hofft, das dem auch so ist &lt;/li&gt;    &lt;li&gt;Man investiert Unmengen Zeit in die eigene browserübergreifende Implementierung diverser Funktionalitäten &lt;/li&gt;    &lt;li&gt;Man bedient sich eines der am Markt verfügbaren JavaScript Frameworks &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Strategie Nr. 1 mag eine Weile ganz gut funktionieren, früher oder später wird aber der Zeitpunkt kommen, an dem man sich nicht mehr drücken kann (ich spreche da aus eigener Erfahrung ;-)). &lt;/p&gt;  &lt;p&gt;Strategie Nr. 2 funktioniert immer dann, wenn der Umfang des benötigten JavaScript Codes überschaubar ist. Gemeinsam mit der Applikation wird aber auch irgendwann der zusammenkopierte Code wachsen und die Wartbarkeit entsprechend sinken.&lt;/p&gt;  &lt;p&gt;Strategie Nr. 3 ist sicherlich eine prima Idee für alle die außerdem auch ein eigenes Logging Framework, einen eigenen OR Mapper usw implementiert haben, oder kurz gesagt für alle die gerne das Rad neu erfinden ;-)&lt;/p&gt;  &lt;p&gt;Gangbar scheint also nur Strategie Nr. 4 zu sein. Schaut man sich nun am Markt um, stößt man unweigerlich auf &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt;. Die freie JavaScript Library adressiert unter anderem genau die zuvor genannten Probleme und hat in letzter Zeit einen wahren Hype verursacht. Dieser Rummel wurde sicherlich auch dadurch verstärkt, dass Microsoft jQuery &lt;a title="jQuery and Microsoft, Scott Gu" href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx" target="_blank"&gt;offiziell supportet, mit Visual Studio ausliefert&lt;/a&gt; und die Arbeiten an der &lt;a title="Microsoft, jQuery, and Templating" href="http://stephenwalther.com/blog/archive/2010/03/16/microsoft-jquery-and-templating.aspx" target="_blank"&gt;hauseigenen JavaScript Bibliothek ASP.NET Ajax Library zugunsten von jQuery eingestellt hat&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Wie legen wir nun aber mit jQuery los? Genau diese Frage möchte ich in diesem und den folgenden Blog Posts beantworten. Da jQuery in einem neuen ASP.NET MVC Projekt automatisch hinzugefügt wird und ASP.NET MVC Entwickler somit sowieso jQuery gewöhnt sind, soll als Beispiel zunächst eine Webforms Anwendung dienen. &lt;/p&gt;  &lt;h2&gt;Auf die Plätze, fertig, los!&lt;/h2&gt;  &lt;p&gt;Wenn man jQuery benutzen möchte, besteht der erste Schritt darin, die freie JavaScript Library in seine Seite einzubinden. Dazu lädt man unter &lt;a href="http://www.jQuery.com"&gt;http://www.jQuery.com&lt;/a&gt; einfach die aktuelle Version der Bibliothek herunter und kopiert diese anschließend zum Beispiel in einen Unterordner Scripts seiner Webanwendung. jQuery ist übrigens in einer für Menschen lesbaren (z. B. jQuery-1.4.2.js) und in einer verkleinerten Version (z, B. jQuery-1.4.2.&lt;strong&gt;min&lt;/strong&gt;.js) verfügbar. In der verkleinerten Version sind unnötige Leerzeichen, Zeilenumbrüche und Kommentare entfernt. Außerdem wurden die Namen der Variablen und nicht öffentlichen Funktionen auf ein oder zwei Buchstaben verkürzt. Sinn dieser Maßnahme ist es die zum Client übertragene Datenmenge zu reduzieren. So ist die verkleinerte Version knappe 100 kb kleiner als die lesbare Variante. Für Produktivszenarien sollte demnach also in jedem Fall die &lt;strong&gt;.min&lt;/strong&gt; Version genutzt werden, wohingegen während der Entwicklungszeit eher die lesbare Variante eingebunden werden sollte. So kann man den Scriptcode im Fall der Fälle nämlich noch debuggen.&lt;/p&gt;  &lt;p&gt;So, genug der Vorrede und zurück zur Praxis. Tatsächlich einbinden können wir jQuery nun über folgende Zeile:&lt;/p&gt;  &lt;pre class="brush: xml"&gt;&amp;lt;script src="Scripts/jquery-1.4.2.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt;Platzieren sollte man diese Zeile übrigens innerhalb des Kopfbereichs der Seite:&lt;/p&gt;

&lt;pre class="brush: xml"&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;head runat="server"&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
    &amp;lt;script src="Scripts/jquery-1.4.2.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;&lt;/pre&gt;

&lt;h2&gt;Prima, aber was mache ich nun damit?&lt;/h2&gt;

&lt;p&gt;Gute Frage! Jetzt haben wir jQuery zwar eingebunden, aber wie geht es jetzt weiter. Dazu sollten wir zunächst kurz einen Blick darauf werfen, was wir normalerweise mit JavaScript machen. In den meißten Fällen reduziert sich dies auf:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Elemente aus dem DOM zu selektieren &lt;/li&gt;

  &lt;li&gt;Selektierte Elemente zu manipulieren (ein- / ausblenden, Styledefinitionen zu verändern...) &lt;/li&gt;

  &lt;li&gt;Code bei bestimmten Ereignissen ausführen (z. B. click event) &lt;/li&gt;

  &lt;li&gt;Neue Elemente dem DOM hinzuzufügen &lt;/li&gt;

  &lt;li&gt;Elemente aus dem DOM zu löschen &lt;/li&gt;

  &lt;li&gt;AJAX Aufrufe zum Server zu machen und die Antwort zu Verarbeiten &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Als kleinen Einstieg picken wir uns exemplarisch die ersten drei Punkte heraus. Wir werden also DOM Elemente selektieren und diese manipulieren. Geschehen wird dies bei dem Klick auf einen Button. &lt;/p&gt;

&lt;p&gt;Dazu werden wir eine Meldungszeile, ähnlich wie man sie von Stackoverflow kennt nachbauen.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codemurai.de/images/LebendigeASP.NETWebseitenmitjQuery_10249/01_so_message.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="01_so_message" src="/images/localhost/01_so_message_thumb.png" width="244" height="50" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Der erste Schritt besteht in der Erstellung eines HTML und CSS Grundgerüsts:&lt;/p&gt;

&lt;pre class="brush: xml" name="code"&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;head runat="server"&amp;gt;
    &amp;lt;title&amp;gt;jQuery Demo&amp;lt;/title&amp;gt;

    &amp;lt;style type="text/css"&amp;gt;
        body
        {
            margin: 0px;
        }
        #message
        {
            background-color: #FFFF88;
            border-bottom: solid 1px #000000;
            font-weight: bold;
            text-align: center;
            padding: 8px;
            margin: 0px;
            display:none;
            font-family: Arial, Verdana, Sans-Serif;
        }
        #message a
        {
            float: right;
            border: solid 3px black;
            font-family: Arial, Verdana, Sans-Serif;
            font-weight: bold;
            text-decoration: none;
            color: Black;
        }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;form id="form1" runat="server"&amp;gt;
    &amp;lt;div id="message"&amp;gt;&amp;lt;span&amp;gt;Dummy Nachricht&amp;lt;/span&amp;gt;&amp;lt;a href="Default.aspx"&amp;gt;X&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div id="content"&amp;gt;
        &amp;lt;p&amp;gt;
            Dies ist eine jQuery Demowebsite&amp;lt;/p&amp;gt;
        &amp;lt;button id="showMessage"&amp;gt;
            Klick mich&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;

&lt;p&gt;Wie man sieht, wird ein DIV Element  mit dem Namen "&lt;em&gt;message&lt;/em&gt;" erstellt, dass als Unterlemente ein SPAN Element und einen Link enthält. Über CSS wird dieses DIV Element noch ein wenig gestyled und initial ausgeblendet. Außerdem ist auf der Seite noch ein Button definiert. Ein Klick auf diesen Button soll der Auslöser sein, um die Meldung anzuzeigen.&lt;/p&gt;

&lt;p&gt;Wie aber genau sieht nun der Code aus, um die Nachricht - mit verändertem Text - anzuzeigen?&lt;/p&gt;

&lt;p&gt;Mit der Hilfe von jQuery ist dies garnicht so schwer:&lt;/p&gt;

&lt;pre class="brush: js" name="code"&gt;$("#showMessage").click(function(evt) {
    evt.preventDefault();
    $("#message span").text("Du hast den Button geklickt. Klicke nun auf das X, um die Nachricht auszublenden.");
    $("#message").fadeIn(2000);
});&lt;/pre&gt;
Auf den ersten Blick mag der Code etwas verwirrend aussehen. Vor allem durch die vielen $-Zeichen. Daher ein paar erklärende Worte: 

&lt;p&gt;In Zeile 1 selektieren wir mit dem Befehl: &lt;em&gt;$("#showMessage")&lt;/em&gt; zunächst das DOM Element mit der ID showMessage, also unseren Button. Das $-Zeichen ist übrigens ein Alias für die jQuery Funktion. Statt $("message") hätte ich also auch jQuery("$message") schreiben können. Die Rückgabe des Aufrufs - unabhängig ob via jQuery(...) oder $(...) ist ein Objekt vom Typ jQuery. Dieses Objekt beinhaltet die selektieren DOM Elemente bzw. das selektierte DOM Element sowie einige weitere Funktionen.&lt;/p&gt;

&lt;p&gt;In unserem Fall bekommen wir also ein Objekt vom Typ jQuery zurück, dass das DOM Element &lt;em&gt;showMessage&lt;/em&gt; beinhaltet. Für dieses DOM Element wird nun eine anonyme Funktion als Handler für das Ereignis Click registriert.&lt;/p&gt;

&lt;p&gt;In Zeile 2 wird mit dem Befehl &lt;em&gt;evt.preventDefault();&lt;/em&gt; nun die Standardaktion die der Browser bei diesem Ereignis, also z. B. das posten des Formulars nach Klick auf den Button, verhindert.&lt;/p&gt;

&lt;p&gt;In Zeile 3 werden anschließend alle span Elemente innerhalb des DOM Elements mit der Id message selektiert. In unserem Fall ist dies also genau eins. Für dieses span Element wird mit der Funktion &lt;em&gt;text&lt;/em&gt; jetzt ein neuer Text vergeben. Außerdem wird das Element mit der Id &lt;em&gt;message&lt;/em&gt; in Zeile 4 langsam (über einen Zeitraum von zwei Sekunden) eingeblendet.&lt;/p&gt;

&lt;p&gt;Der Quellcode zum Ausblenden der Nachricht sieht ähnlich aus:&lt;/p&gt;

&lt;pre class="brush: js"&gt;$("#message a").click( function(evt) {
     evt.preventDefault();
     $("#message").fadeOut("slow");
 });&lt;/pre&gt;

&lt;p&gt;In Zeile 1 wird an alle A-Elemente innerhalb des DOM Elements mit der Id &lt;em&gt;message &lt;/em&gt;ein Eventhandler für das Ereignis Click angehangen. Dieser verhindert in Zeile 2 die Standardaktion des Links und blendet in Zeile 3 unsere Nachrichtenzeile wieder aus. Dieses mal wird statt einer Angabe in Millisekunden der String "slow" als Argument übergeben. Dieser ist in den jQuery Quellcodes mit einem Wert von 600 ms hinterlegt.&lt;/p&gt;

&lt;h2&gt;Perfekt, aber wo schreibe ich den Code nun rein?&lt;/h2&gt;

&lt;p&gt;So, jetzt wo wir eigentlich den ganzen Quellcode fertig haben stellt sich natürlich die Frage, wie wir ihn in unsere Seite einbinden. Eine naive Implementierung sähe wie folgt aus:&lt;/p&gt;

&lt;pre class="brush: js" name="code"&gt;&amp;lt;head&amp;gt;
&amp;lt;!-- ... --&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;
    $("#showMessage").click(function(evt) {
        evt.preventDefault();
        $("#message span").text("Du hast den Button geklickt. Klicke nun auf das X, um die Nachricht auszublenden.");
        $("#message").fadeIn(2000);
    });
    $("#message a").click( function(evt) {
        evt.preventDefault();
        $("#message").fadeOut("slow");
    });
&amp;lt;/script&amp;gt;
&amp;lt;!-- ... --&amp;gt;
&amp;lt;/head&amp;gt;&lt;/pre&gt;

&lt;p&gt;Der Code würde also einfach in ein Scripttag innerhalb des Head Tags kopiert werden. &lt;strong&gt;Dies läuft so nicht&lt;/strong&gt;! Der Grund ist, dass mit diesem Code versucht wird, ein Eventhandler an ein DOM Element zu binden, das es zu diesem Zeitpunkt noch garnicht gibt.&lt;/p&gt;

&lt;p&gt;Wie sieht aber die Lösung für das Problem aus?&lt;/p&gt;

&lt;h2&gt;Alles zu seiner Zeit&lt;/h2&gt;

&lt;p&gt;Wie wir zuvor gesehen haben, ist unser Code wirkungslos, wenn wir ihn ausführen ehe es ein entsprechendes DOM Element gibt. Daher sollten wir ihn erst auslösen, sobald das DOM vollständig initialisiert ist.&lt;/p&gt;

&lt;p&gt;Ein weg dies zu erreichen wäre es, den Code aufzurufen wenn das Ereignis &lt;em&gt;window.onload&lt;/em&gt; eintritt:&lt;/p&gt;

&lt;pre class="brush: js"&gt;window.onload = function() {
  $("#showMessage").click(function(evt) {
     evt.preventDefault();
     // Restlicher Code hier
  });
}&lt;/pre&gt;

&lt;p&gt;Diese Variante würde bereits fehlerfrei funktionieren. Allerdings wird das Ereignis onload erst ausgelöst, wenn das DOM vollständig initialisiert wurde &lt;strong&gt;und&lt;/strong&gt; alle externen Ressourcen, wie zum Beispiel Bilder oder Stylesheets geladen wurden. Dies kann von Fall zu Fall recht lange dauern, so dass der Anwender den Button bereits anklicken könnte, ohne dass unser Script ausgeführt wird. Zum Glück bietet jQuery einen besseren Ansatz, nämlich &lt;em&gt;$(document).ready&lt;/em&gt;. In dieser Variante wird das Ereignis ready ausgelöst, sobald das DOM vollständig initialisiert wurde, aber &lt;strong&gt;bevor&lt;/strong&gt; externe Ressourcen geladen wurden.&lt;/p&gt;

&lt;p&gt;Das vollständige Beispiel mit $(document).ready sieht dann wie folgt aus:&lt;/p&gt;

&lt;pre class="brush: xml"&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;head runat="server"&amp;gt;
    &amp;lt;title&amp;gt;jQuery Demo&amp;lt;/title&amp;gt;

    &amp;lt;script src="Scripts/jquery-1.4.1.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;

    &amp;lt;style type="text/css"&amp;gt;
        body
        {
            margin: 0px;
        }
        #message
        {
            background-color: #FFFF88;
            border-bottom: solid 1px #000000;
            font-weight: bold;
            text-align: center;
            padding: 8px;
            margin: 0px;
            display:none;
            font-family: Arial, Verdana, Sans-Serif;
        }
        #message a
        {
            float: right;
            border: solid 3px black;
            font-family: Arial, Verdana, Sans-Serif;
            font-weight: bold;
            text-decoration: none;
            color: Black;
        }
    &amp;lt;/style&amp;gt;

    &amp;lt;script type="text/javascript"&amp;gt;
        $(document).ready(function() {
            $("#showMessage").click(function(evt) {
                evt.preventDefault();
                $("#message span").text("Du hast den Button geklickt. Klicke nun auf das X, um die Nachricht auszublenden.");
                $("#message").fadeIn(2000);
            });
            $("#message a").click(function(evt) {
                evt.preventDefault();
                $("#message").fadeOut("slow");
            }
        }
      });
    &amp;lt;/script&amp;gt;

&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;form id="form1" runat="server"&amp;gt;
    &amp;lt;div id="message"&amp;gt;&amp;lt;span&amp;gt;Dummy Nachricht&amp;lt;/span&amp;gt;&amp;lt;a href="Default.aspx"&amp;gt;X&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div id="content"&amp;gt;
        &amp;lt;p&amp;gt;
            Dies ist eine jQuery Demowebsite&amp;lt;/p&amp;gt;
        &amp;lt;button id="showMessage"&amp;gt;
            Klick mich&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;

&lt;h2&gt;Ausblick und Fazit&lt;/h2&gt;

&lt;p&gt;Wie dieser Blog Eintrag gezeigt hat, ist jQuery eine recht komfortabel zu bediene JavaScript Library, mit der sich mit wenigen Zeilen Script Code interessante Effekte erzielen lassen. Neben der intuitiven und Browser unabhängigen API besticht die Bibliothek vor allem durch die Fülle an Funktionen und erhältlichen Plug-Ins. Selbstverständlich konnte ich hier nur einen kurzen (ersten) Einblick verschaffen. Da ich das Thema Clientseitige Entwicklung in (ASP.NET) Webanwendungen jedoch für sehr interessant halte, habe ich vor in der nächsten Zeit weitere Einträge zum Thema jQuery mit folgenden Schwerpunkten zu schreiben:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Nutzen von Content Delivery Networks (CDNs) &lt;/li&gt;

  &lt;li&gt;jQuery Selektoren &lt;/li&gt;

  &lt;li&gt;Möglichkeiten der DOM Manipulation &lt;/li&gt;

  &lt;li&gt;jQuery und Firebug &lt;/li&gt;

  &lt;li&gt;jQuery Plugins selber entwickeln &lt;/li&gt;

  &lt;li&gt;jQuery UI &lt;/li&gt;

  &lt;li&gt;jQuery Utility Funktionen &lt;/li&gt;

  &lt;li&gt;jQuery und Ajax für Webforms und ASP.NET MVC &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventuell werde ich im Anschluss an die Artikel auch kurze Video Tutorials bereitstellen.&lt;/p&gt;

&lt;p&gt;Bevor ich allerdings loslege würde mich natürlich interessieren, ob das Thema für euch überhaupt von Interesse ist. Am liebsten in Form eines kurzen Kommentars.&lt;/p&gt;

&lt;p&gt;Sollte jemand von euch übrigens das Verlangen haben, das Thema jQuery, oder auch generell ASP.NET mit mir persönlich in lockerer Atmosphäre zu diskutieren: Am 28. Mai werde ich einen &lt;strong&gt;Einsteigervortrag&lt;/strong&gt; zu jQuery auf der &lt;a title="Homepage der dotnet Cologne 2010" href="http://dotnet-cologne.de/" target="_blank"&gt;dotnet Cologne 2010&lt;/a&gt; halten. Über zahlreiche Besucher des Vortrags und natürlich auch spannende Diskussionen danach würde ich mich sehr freuen.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.dotnet-cologne.de/public/Upload/Werbung/dc2010_Sprecher_180x80.png" /&gt; &lt;/p&gt;

&lt;p&gt;In den Pausen findet man ihr mich übrigens wahrscheinlich im Ausstellerbereich am Stand der Firma &lt;a title="Homepage der Firma Infragistics" href="http://www.infragistics.com" target="_blank"&gt;Infragistics&lt;/a&gt;. Dort wäre ich dann zusätzlich auch für den ein oder anderen Plausch über die &lt;a href="http://www.infragistics.com/dotnet/netadvantage.aspx" target="_blank"&gt;Infragistics NetAdvantage&lt;/a&gt; Komponenten zu haben.&lt;/p&gt;

&lt;p&gt;&lt;em /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;War dieser Artikel hilfreich für dich? Dann kicke ihn doch bitte bei dotnet-kicks.de!&lt;/em&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e333657d-0716-4fda-972d-3b6d14bd7580" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://blog.codemurai.de/tags/jQuery/default.aspx" rel="tag"&gt;jQuery&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/ASP.NET/default.aspx" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://blog.codemurai.de/tags/Webentwicklung/default.aspx" rel="tag"&gt;Webentwicklung&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blog.codemurai.de/aggbug/130.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>André Krämer</dc:creator>
            <guid>http://blog.codemurai.de/archive/2010/05/04/lebendige-asp-net-webseiten-mit-jquery.aspx</guid>
            <pubDate>Tue, 04 May 2010 20:47:09 GMT</pubDate>
            <comments>http://blog.codemurai.de/archive/2010/05/04/lebendige-asp-net-webseiten-mit-jquery.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blog.codemurai.de/comments/commentRss/130.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
