<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
  <channel>
    <title>dotnet-forum.de - Developer Blogs</title>
    <description> </description>
    <link>http://dotnet-forum.de/DeveloperBlogs/default.aspx</link>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Community Server v2.0 (http://www.communityserver.org)</generator>
    <item>
      <title>Silverlight 4: Out-Of-Browser Enhancements</title>
      <description>&lt;p&gt;Silverlight 4 comes with a lot of new features. A common request was the support of different types of window styles for the out-of-browser-functionality. &lt;/p&gt;  &lt;p&gt;And … Microsoft listen … The support is there. This feature enables a developer to create their on style of window styles for their browser. This is requires, the agreement of the user, to change this. &lt;/p&gt;  &lt;p&gt;When you customize your application for deployment, you have now several options in the configuration. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/Silverlight4OutOfBrowserEnhancements_D14A/image_4.png"&gt;&lt;img style="border-right-width:0px;margin:0px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/Silverlight4OutOfBrowserEnhancements_D14A/image_thumb_1.png" width="244" height="52" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The button “Out-of-Browser-Settings” enables the developer to customize the behavior of the Application, when it runs out of browser. If you request elevated trust from the user, you can choose different styles of a window. &lt;/p&gt; &lt;a href="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/Silverlight4OutOfBrowserEnhancements_D14A/image_6.png"&gt;&lt;img style="border-right-width:0px;margin:0px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/Silverlight4OutOfBrowserEnhancements_D14A/image_thumb_2.png" width="307" height="72" /&gt;&lt;/a&gt;   &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;When the user tries to install the application he got the following standard installation Prompt. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/Silverlight4OutOfBrowserEnhancements_D14A/image_2.png"&gt;&lt;img style="border-right-width:0px;margin:0px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/Silverlight4OutOfBrowserEnhancements_D14A/image_thumb.png" width="380" height="305" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After that, he can enjoy one of the following window styles:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Default Style &lt;/li&gt;    &lt;li&gt;No Border &lt;/li&gt;    &lt;li&gt;Single Border &lt;/li&gt;    &lt;li&gt;Borderless round corners      &lt;br /&gt;Have fun,       &lt;br /&gt;The-Oliver       &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9976874" width="1" height="1" alt="" /&gt;</description>
      <link>http://blogs.msdn.com/olivers/archive/2010/03/15/silverlight-4-out-of-browser-enhancements.aspx</link>
      <author>Oliver Scheer</author>
      <dc:creator>OliverS</dc:creator>
      <comments>http://blogs.msdn.com/olivers/comments/9976874.aspx</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:9976874</guid>
      <pubDate>Mon, 15 Mar 2010 11:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Daily Demo: Tipping Text</title>
      <description>&lt;p&gt;Basierend auf einer wahren Begebenheit habe ich das folgende Steuerelement gebastelt. Es macht nichts anderes als Text zu tippen … klingt einfach … ist es auch. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/Demo_128FB/image_2.png"&gt;&lt;img style="border-right-width:0px;margin:0px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/Demo_128FB/image_thumb.png" width="481" height="368" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Liveversion: &lt;a href="http://os75.com/dailydemo/20100315/default.html" target="_blank"&gt;hier&lt;/a&gt;.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Code für das Steuerelement&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Windows;
&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Windows.Controls;
&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Windows.Threading;

&lt;span style="color:blue;"&gt;namespace &lt;/span&gt;TheOliver.Controls
{
    &lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TippingText &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;UserControl
    &lt;/span&gt;{
        &lt;span style="color:#2b91af;"&gt;TextBox &lt;/span&gt;_textblock;
        &lt;span style="color:#2b91af;"&gt;DispatcherTimer &lt;/span&gt;_timer;

        &lt;span style="color:blue;"&gt;public &lt;/span&gt;TippingText()
        {
            _textblock = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextBox&lt;/span&gt;();

            &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Content = _textblock;

            _timer = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DispatcherTimer&lt;/span&gt;();
            
            _timer.Interval = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;(0, 0, 0, 0, TippingSpeedInMilliseconds);
            _timer.Tick += (s, e) =&amp;gt;
                {
                    ShowNextCharacter();
                    _currentCharacter++;
                    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(_currentCharacter &amp;gt;= Text.Length)
                    {
                        _timer.Stop();
                        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(Repeat)
                        {
                            _currentCharacter = 0;
                            _timer.Start();
                        }
                    }
                };

            &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Loaded += (s, e) =&amp;gt;
                {
                    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(Text.Length &amp;gt; 0)
                    {
                        _timer.Start();
                    }
                };
        }

        &lt;span style="color:blue;"&gt;private void &lt;/span&gt;ShowNextCharacter()
        {
            &lt;span style="color:blue;"&gt;if &lt;/span&gt;(Text.Length &amp;gt; _currentCharacter + 1)
            {
                _textblock.Text = Text.Substring(0, _currentCharacter + 1);
            }
        }

        &lt;span style="color:blue;"&gt;private int &lt;/span&gt;_currentCharacter;

        &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Text
        {
            &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:blue;"&gt;string&lt;/span&gt;)GetValue(TextProperty); }
            &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ SetValue(TextProperty, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }
        }

        &lt;span style="color:blue;"&gt;public static readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DependencyProperty &lt;/span&gt;TextProperty =
            &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(
                &lt;span style="color:#a31515;"&gt;&amp;quot;Text&amp;quot;&lt;/span&gt;, 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;string&lt;/span&gt;), 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TippingText&lt;/span&gt;), 
                &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyMetadata&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;No Text&amp;quot;&lt;/span&gt;, OnValueChanged));

        &lt;span style="color:blue;"&gt;private static void &lt;/span&gt;OnValueChanged(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;DependencyPropertyChangedEventArgs &lt;/span&gt;args)
        {
            &lt;span style="color:#2b91af;"&gt;TippingText &lt;/span&gt;tt = sender &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TippingText&lt;/span&gt;;
            tt._timer.Stop();
            tt._timer.Interval = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;(0, 0, 0, 0, tt.TippingSpeedInMilliseconds);
            tt._currentCharacter = 0;
            tt._textblock.TextWrapping = tt.TextWrapping;
            tt._textblock.TextAlignment = tt.TextAlignment;
            tt._textblock.Text = tt.Text;
            &lt;span style="color:blue;"&gt;if &lt;/span&gt;(tt.Text.Length &amp;gt; 0)
            {
                tt._timer.Start();
            }
        }

        &lt;span style="color:blue;"&gt;public int &lt;/span&gt;TippingSpeedInMilliseconds
        {
            &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:blue;"&gt;int&lt;/span&gt;)GetValue(TippingSpeedInMillisecondsProperty); }
            &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ SetValue(TippingSpeedInMillisecondsProperty, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }
        }

        &lt;span style="color:blue;"&gt;public static readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DependencyProperty &lt;/span&gt;TippingSpeedInMillisecondsProperty =
            &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(
                &lt;span style="color:#a31515;"&gt;&amp;quot;TippingSpeedInMilliseconds&amp;quot;&lt;/span&gt;, 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;int&lt;/span&gt;), 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TippingText&lt;/span&gt;),
                &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyMetadata&lt;/span&gt;(200, OnValueChanged));

        &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;Repeat
        {
            &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:blue;"&gt;bool&lt;/span&gt;)GetValue(RepeatProperty); }
            &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ SetValue(RepeatProperty, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }
        }

        &lt;span style="color:blue;"&gt;public static readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DependencyProperty &lt;/span&gt;RepeatProperty =
            &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(
                &lt;span style="color:#a31515;"&gt;&amp;quot;Repeat&amp;quot;&lt;/span&gt;, 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;bool&lt;/span&gt;), 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TippingText&lt;/span&gt;), 
                &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyMetadata&lt;/span&gt;(&lt;span style="color:blue;"&gt;true&lt;/span&gt;, OnValueChanged));

        &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextWrapping &lt;/span&gt;TextWrapping
        {
            &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TextWrapping&lt;/span&gt;)GetValue(TextWrappingProperty); }
            &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ SetValue(TextWrappingProperty, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }
        }

        &lt;span style="color:blue;"&gt;public static readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DependencyProperty &lt;/span&gt;TextWrappingProperty =
            &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(
                &lt;span style="color:#a31515;"&gt;&amp;quot;TextWrapping&amp;quot;&lt;/span&gt;,
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TextWrapping&lt;/span&gt;), 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TippingText&lt;/span&gt;),
                &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyMetadata&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TextWrapping&lt;/span&gt;.Wrap, OnValueChanged));

        &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextAlignment &lt;/span&gt;TextAlignment
        {
            &lt;span style="color:blue;"&gt;get &lt;/span&gt;{ &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TextAlignment&lt;/span&gt;)GetValue(TextAlignmentProperty); }
            &lt;span style="color:blue;"&gt;set &lt;/span&gt;{ SetValue(TextAlignmentProperty, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }
        }

        &lt;span style="color:blue;"&gt;public static readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DependencyProperty &lt;/span&gt;TextAlignmentProperty =
            &lt;span style="color:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(
                &lt;span style="color:#a31515;"&gt;&amp;quot;TextAlignment&amp;quot;&lt;/span&gt;, 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TextAlignment&lt;/span&gt;), 
                &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TippingText&lt;/span&gt;), 
                &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyMetadata&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TextAlignment&lt;/span&gt;.Center, OnValueChanged));

        
    }
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://os75.com/dailydemo/20100315/solution.zip" target="_blank"&gt;Download Sourcecode&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9976434" width="1" height="1" alt="" /&gt;</description>
      <link>http://blogs.msdn.com/olivers/archive/2010/03/15/daily-demo-tipping-text.aspx</link>
      <author>Oliver Scheer</author>
      <dc:creator>OliverS</dc:creator>
      <comments>http://blogs.msdn.com/olivers/comments/9976434.aspx</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:9976434</guid>
      <pubDate>Mon, 15 Mar 2010 08:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Wie böse ist RAD?</title>
      <description>&lt;p&gt;Jeder der mich kennt, weiß, dass ich keine freund von RAD-Controls (Rapid Application Developement) – besonders von Controls und Tools diverser Drittanbietern – bin. &lt;/p&gt;  &lt;p&gt;Aber halte ich RAD deshalb generell böse?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.ralfw.de/"&gt;Ralf Westphal&lt;/a&gt; schreib im aktuellen Beitrag seiner Kolumne “Sandbox” (in der dotnetpro 4/2010) sinngemäß und zusammengefasst: RAD-Tools für sich gesehen sind nicht böse, sondern die naive Herangehensweise, also zu glauben, dass RAD alle Probleme erledigt, ist böse, bzw. schlecht und die daraus resultierenden Probleme werfen ein schlechtes Licht auf RAD.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ist das wirklich so?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Generell kann ich die Frage leider nicht komplett beantworten. Sondern nur aus meiner Sicht als Webentwickler, auf RAD-Tools und RAD-Controls für ASP.NET. Ich kann mich also nur auf ASP.NET beziehen und weis nicht wie es sich bei WinForms, WPF und SilverLight verhält.&lt;/p&gt;  &lt;p&gt;So wie Ralf es beschreibt, würde ich generell erst mal “Ja” sagen, aber aus meiner Sicht kommen einige Fragen hinzu. Warum gibt es denn überhaupt die Möglichkeit, dass man sich bei naiver Herangehensweise seine komplette Anwendung mit RAD-Tools und RAD-Controls versauen kann? Warum schaffen es die Anbieter nicht, einfache, kleine und flexible Tools zu schaffen mit denen man nicht viel falsch machen kann? Warum müssen alle möglichen, erdenkbaren Funktionen von Anfang an in einem RAD-Tool, bzw. RAD-Control enthalten sein?&lt;/p&gt;  &lt;p&gt;Schöne und positive Beispiele kommen von Microsoft selber: LINQ to SQL; die ASP.NET Controls GridView und Calendar sind absolut flexibel beliebig erweiterbar. Es ist also generell machbar.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Zu großer Umfang&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Müssen RAD-Tools und drittanbieter-Controls so viele Funktionen anbieten, das der naive Nutzer alle Möglichkeiten ausnutzen will? Anbieter von RAD-Tools wollen die breite Masse zufrieden stellen und stellen deshalb die eierlegende Wollmilchsau zur Verfügung. Das muss aber nicht sein, ganz im Gegenteil. Ich persönlich nutze lieber die kleine Schlanke Komponente die ich selber erweitern kann und nicht das Universal-Tool von dem ich 80% nicht benötige, aber mit schleifen muss.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unförmiger HTML Code&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Wer meinen UG-Vortrag im Herbst (beim &lt;a title=".NET-Stammtisch Konstanz-Kreuzlingen" href="http://dotnetkk.de"&gt;.NET-Stammtisch Konstanz-Kreuzlingen&lt;/a&gt;) gesehen hat, konnte miterleben wie sich die verschiedenen Hersteller bei der Menge an HTML-Code, JavaScripts und HTML-Verschachtelungen überboten haben. (Ich bin gerne bereit diesen Vortrag auch in einer anderen UGs zu halten. Machen Sie sich dabei auf was gefasst *fg*)&lt;/p&gt;  &lt;p&gt;Ein namhafter Hersteller von RAD-Controls zwingt die Browser in die Knie, wenn man mehr als 10 abhängige Comboboxen nutzt, die unter anderem Grids beinhalten. Eine Combobox dieses Anbieters benötigt für 10 Listeneinträge übrigens mehrere ineinander verschachtelte HTML-Tabellen und mehr als 30 Zeilen HTML-Code. Nutzt man zusätzlich noch die Möglichkeit, beim Aufklappen der Combobox ein Grid anzuzeigen, erhöht sich die Menge des benötigten HTML-Codes um die benötigte Menge des Grids, welches auch nicht gerade sparsam mit verschachtelten HTML-Tabellen umgeht. Hinzu kommen Unmengen von JavaScripts, die direkt auf der Seite ausgegeben werden. Die kleine Combobox entpuppt sich bei genauerer Betrachtung als ein riesiges, unperformates und überladenes Control.&lt;/p&gt;  &lt;p&gt;Ein weiterer Hersteller hatte es übrigens nicht geschafft, trotz enormer Mengen an unsauberen Code und JavaScripts, die Combobox in allen Browsern zu funktionieren: Im Opera war lediglich eine leere Standard-Combobox zu sehen.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Zu unflexibel und schlecht erweiterbar&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Warum schaffen es die meisten Hersteller von RAD-Tools und drittanbieter-Controls nicht, flexible und erweiterbare Tools und Controls zu erstellen?&lt;/p&gt;  &lt;p&gt;In einer Kalender-Komponente eines weiteren namhaften Herstellers, benötigte ich zwei Wochen, um ein Doppelklick-Event auf einen Kalendertag abzufangen und einen eigenen Termindialog anzubinden.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Warum ich nicht den vorhandenen Dialog genutzt habe?      &lt;br /&gt;Dieser Passte nicht zu der Art von Terminen war nur schwer erweiterbar und passte nicht in das Layout. &lt;/li&gt;    &lt;li&gt;Warum ich nicht die Komponente eines anderen Herstellers genommen habe?      &lt;br /&gt;Alle anderen waren aufgrund von unsauberen HTML-Code einfach zu unperformant beim Aufbau der Seite, zudem schaffte es das herstellereigene JavaScript nicht mal mehr die per Callback geholten Termine in diesen unmöglichen Code zu setzen. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Grund hier war eine nicht dokumentierte, clientseitige JavaScript API und das tagelange JavaScript-Debugging in unschönem Code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fazit&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Es ist nicht nur alleine die Naivität der, Nutzer sondern auch die Art wie die Hersteller die Controls produzieren und vermarkten. Auf den Demoseiten der Hersteller sieht alles toll und bunt aus, alles funktioniert einwandfrei, aber dort habe ich auch nie mehr als zehn abhängige Grid-Comboboxen gesehen ;-)&lt;/p&gt;  &lt;p&gt;Man RAD-Controls ist man unheimlich schnell bei der Entwicklung von schönen, bunten und benutzerfreundlichen Oberflächen.&lt;/p&gt;  &lt;p&gt;Mit RAD-Controls stößt man aber auch unheimlich schnell auf Probleme, wenn man spezielle Anforderungen hat und wenn man Anpassungen und Erweiterungen an den Controls vornehmen möchte. RAD-Controls werden als schnell einsetzbare Tools präsenteiert, aber unter den schönen bunten Oberfläche erweisen sich die meisten als unflexibel, schlecht dokumentiert und unperformant.&lt;/p&gt;  &lt;p&gt;Klingt jetzt wahnsinnig abwertend, gell? &lt;/p&gt;  &lt;p&gt;Aber ich möchte RAD-Controls nicht generell schlecht machen. Wenn man keine sehr speziellen Anforderungen an z. B: Grid und Kalender-Controls hat, kann und sollte man diese auch nutzen. Der Entwicklungsaufwand um selber eine entsprechendes Control zu schreiben ist einfach zu hoch. &lt;/p&gt;  &lt;p&gt;Nur warum sollte man eine TextBox, eine ComboBox, eine CheckBox, etc. von einem Drittanbieter verwenden? Wegen dem schönen Design? Wohl kaum, denn dafür gibt es CSS.&lt;/p&gt;  &lt;p&gt;Wegen einer speziellen Funktion mehr? Eine Funktion ist schnell selber geschrieben. Oder man benutzt vorhandene JavaScript-Frameworks, wie z. B. jQuery, um Controls zu erweitern ohne den HTML-Code aufzublähen und die Browser in die Knie zu zwingen.&lt;/p&gt;  &lt;p&gt;Im Gegenteil halte ich RAD für absolut Sinnvoll und sollte auf alle Fälle in Betracht gezogen werden, wenn es darum geht den Aufwand klein zu halten. Allerdings hat Ralf absolut recht, wenn man die meisten, heute auf dem Markt befindlichen RAD-Tools anschaut, sollte, bzw. darf man nicht naiv daherkommen und einfach so alle möglichen Tools einsetzen und nutzen, sondern sollte sich penibel mit den Tools auseinandersetzen, abwägen und schauen wie erweiterbar und flexibel die Controls und Tools wirklich sind.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Zu guter Letzt:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ich kann es einfach nicht lassen und muss hier mal ein anonymisiertes Beispiel posten.&lt;/p&gt;  &lt;p&gt;Es soll ein schöner, bunter, formatierter Button angezeigt werden:&lt;/p&gt;  &lt;p&gt;&amp;lt;table cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;height: 57px;&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;tr&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;td&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;table cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; id=&amp;quot;ctl00_phContent_BackgroundImageTextGroupBox_Button1&amp;quot; border=&amp;quot;0&amp;quot; style=&amp;quot;height:30px;width:90px;border-collapse:collapse;border-collapse:separate;&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;tr&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;td id=&amp;quot;ctl00_phContent_BackgroundImageTextGroupBox_Button1_B&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color:White;background-image:url(Images/Wine/normal.jpg);cursor:pointer;padding-bottom:2px;&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div id=&amp;quot;ctl00_phContent_BackgroundImageTextGroupBox_Button1_CD&amp;quot; class=&amp;quot;dxb&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;span&amp;gt;Submit&amp;lt;/span&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/td&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;td style=&amp;quot;width:0%;&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;input value=&amp;quot;&amp;quot; onfocus=&amp;quot;ButtonGotFocus(&amp;#39;ctl00_phContent_BackgroundImageTextGroupBox_Button1&amp;#39;)&amp;quot; name=&amp;quot;ctl00$phContent$BackgroundImageTextGroupBox$Button1&amp;quot; type=&amp;quot;submit&amp;quot; style=&amp;quot;background-color:Transparent;border-width:0px;height:0px;width:0px;padding:0px;&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/td&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/tr&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/table&amp;gt;&amp;lt;script id=&amp;quot;dxss_202605327&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;     &lt;br /&gt;&amp;lt;!--     &lt;br /&gt;addHoverItems(&amp;#39;ctl00_phContent_BackgroundImageTextGroupBox_Button1&amp;#39;,[[[&amp;#39;&amp;#39;],[&amp;#39;padding-bottom:2px;color:#FAD9E0;background-image:url(Images/Wine/hover.jpg);&amp;#39;],[&amp;#39;B&amp;#39;],[&amp;#39;&amp;#39;,&amp;#39;TC&amp;#39;],[[&amp;#39;&amp;#39;]],[&amp;#39;Img&amp;#39;]]]);     &lt;br /&gt;addPressedItems(&amp;#39;ctl00_phContent_BackgroundImageTextGroupBox_Button1&amp;#39;,[[[&amp;#39;&amp;#39;],[&amp;#39;padding-bottom:2px;color:#DCB7C8;background-image:url(Images/Wine/pressed.jpg);&amp;#39;],[&amp;#39;B&amp;#39;],[&amp;#39;&amp;#39;,&amp;#39;TC&amp;#39;],[[&amp;#39;&amp;#39;]],[&amp;#39;Img&amp;#39;]]]);     &lt;br /&gt;var o = new ClientButton(&amp;#39;ctl00_phContent_BackgroundImageTextGroupBox_Button1&amp;#39;);     &lt;br /&gt;window[&amp;#39;ctl00_phContent_BackgroundImageTextGroupBox_Button1&amp;#39;] = o;     &lt;br /&gt;o.uniqueID = &amp;#39;ctl00$phContent$BackgroundImageTextGroupBox$Button1&amp;#39;;     &lt;br /&gt;addSelectedItems(&amp;#39;ctl00_phContent_BackgroundImageTextGroupBox_Button1&amp;#39;,[[[&amp;#39;bf&amp;#39;],[&amp;#39;&amp;#39;],[&amp;#39;CD&amp;#39;]]]);     &lt;br /&gt;o.InlineInitialize();     &lt;br /&gt;//--&amp;gt;     &lt;br /&gt;&amp;lt;/script&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/td&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/tr&amp;gt;     &lt;br /&gt;&amp;lt;/table&amp;gt;&lt;/p&gt;  &lt;p&gt;Die “alternative” mit normalem HTML würde so aussehen:&lt;/p&gt;  &lt;p&gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Submit&amp;quot; class=&amp;quot;beautifulButton&amp;quot; id=&amp;quot;submitButton&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p&gt;Formatiert mit CSS und ggf. erweitert per jQuery und man hat ein besseres Ergebnis, da der HTML-Code schlanker ist und die Browser weniger zeit für die Verarbeitung benötigen.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 4px 4px 4px;"&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/03/15/wie-b-se-ist-rad.aspx"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/03/15/wie-b-se-ist-rad.aspx&amp;amp;bgcolor=3169AD&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks-DE Image" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=216434" width="1" height="1" alt="" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jgutsch?a=FNv4l4Nnjiw:x1N7MByoeR0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jgutsch?d=yIl2AUoC8zA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jgutsch?a=FNv4l4Nnjiw:x1N7MByoeR0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jgutsch?i=FNv4l4Nnjiw:x1N7MByoeR0:F7zBnMyn0Lo" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jgutsch?a=FNv4l4Nnjiw:x1N7MByoeR0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jgutsch?i=FNv4l4Nnjiw:x1N7MByoeR0:V_sGLiPBpWU" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jgutsch?a=FNv4l4Nnjiw:x1N7MByoeR0:mNpC_eAfmKU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jgutsch?d=mNpC_eAfmKU" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jgutsch/~4/FNv4l4Nnjiw" height="1" width="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/jgutsch/~3/FNv4l4Nnjiw/wie-b-se-ist-rad.aspx</link>
      <author>Jürgen Gutsch</author>
      <dc:creator>Jürgen Gutsch</dc:creator>
      <guid isPermaLink="False">http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/03/15/wie-b-se-ist-rad.aspx</guid>
      <pubDate>Mon, 15 Mar 2010 06:42:01 GMT</pubDate>
    </item>
    <item>
      <title>Design.Toolbox – Portal für Online Design Trainings</title>
      <description>&lt;p&gt;Microsoft hat gerade eine neue Plattform für kostenfreie Online-Trainings zu Silverlight und Expression Studio gelauchnt. Zielgruppe sind alle Designer und Design-affine Entwickler.&lt;/p&gt; &lt;a href="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/8c3b25960a6d_8A2E/image_2.png"&gt;&lt;img style="border-right-width:0px;margin:0px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/olivers/WindowsLiveWriter/8c3b25960a6d_8A2E/image_thumb.png" width="457" height="217" /&gt;&lt;/a&gt;   &lt;p&gt;Link: &lt;a title="http://www.microsoft.com/design/toolbox/" href="http://www.microsoft.com/design/toolbox/"&gt;http://www.microsoft.com/design/toolbox/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9978097" width="1" height="1" alt="" /&gt;</description>
      <link>http://blogs.msdn.com/olivers/archive/2010/03/15/design-toolbox-portal-f-r-online-design-trainings.aspx</link>
      <author>Oliver Scheer</author>
      <dc:creator>OliverS</dc:creator>
      <comments>http://blogs.msdn.com/olivers/comments/9978097.aspx</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:9978097</guid>
      <pubDate>Mon, 15 Mar 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Twitter Weekly Updates – 2010-03-14</title>
      <description>Formula One Livestream outside from Germany,  Austria,  Switzerland use http://goo.gl/8afE #
Formula One livestream [german] http://goo.gl/U8oT #
RT @thecodeproject: Globalization in WPF or Silverlight: Dynamic globalization without breaking design time. http://bit.ly/akzVbP #
thx for sharing RT @edward_tanguay: english learners: this text-to-speech service is best I&amp;#39;ve heard http://is.gd/apMWf #
share documents, pics and files over your #twitter account</description>
      <link>http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14-3</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14-3#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14-3</guid>
      <pubDate>Sun, 14 Mar 2010 22:59:00 GMT</pubDate>
    </item>
    <item>
      <title>Twitter Weekly Updates – 2010-03-14</title>
      <description>Formula One Livestream outside from Germany,  Austria,  Switzerland use http://goo.gl/8afE #
Formula One livestream [german] http://goo.gl/U8oT #
RT @thecodeproject: Globalization in WPF or Silverlight: Dynamic globalization without breaking design time. http://bit.ly/akzVbP #
thx for sharing RT @edward_tanguay: english learners: this text-to-speech service is best I&amp;#39;ve heard http://is.gd/apMWf #
share documents, pics and files over your #twitter account</description>
      <link>http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14-2</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14-2#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14-2</guid>
      <pubDate>Sun, 14 Mar 2010 22:59:00 GMT</pubDate>
    </item>
    <item>
      <title>Twitter Weekly Updates – 2010-03-14</title>
      <description>Formula One Livestream outside from Germany,  Austria,  Switzerland use http://goo.gl/8afE #
Formula One livestream [german] http://goo.gl/U8oT #
RT @thecodeproject: Globalization in WPF or Silverlight: Dynamic globalization without breaking design time. http://bit.ly/akzVbP #
thx for sharing RT @edward_tanguay: english learners: this text-to-speech service is best I&amp;#39;ve heard http://is.gd/apMWf #
share documents, pics and files over your #twitter account</description>
      <link>http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/twitter-weekly-updates-2010-03-14</guid>
      <pubDate>Sun, 14 Mar 2010 22:59:00 GMT</pubDate>
    </item>
    <item>
      <title>(Spreu + Weizen).Select(Programmierer)</title>
      <description>Obwohl wir Jeff Atwood schon vor Monaten von unseren Bloggerliste gestrichen haben, ich habe ihn noch nicht aus meinem Googlereader entfernt. Er ist ein Typ, der liebt viel Wirbel zu verursachen (Scott Hanselmann nennt ihn aus den Wörtern friend und enemy &amp;#8220;my friendemy&amp;#8221;   ) aber manchmal trifft er den Nagel auf den Kopf. [...]</description>
      <link>http://blog.aztec-project.org/2010/03/14/spreu-weizen-selectprogrammierer/</link>
      <author>Christina Hirth</author>
      <dc:creator>Christina Hirth</dc:creator>
      <comments>http://blog.aztec-project.org/2010/03/14/spreu-weizen-selectprogrammierer/#comments</comments>
      <guid isPermaLink="False">http://blog.aztec-project.org/?p=935</guid>
      <pubDate>Sun, 14 Mar 2010 11:41:36 GMT</pubDate>
    </item>
    <item>
      <title>Hyperlinks in das Word-Nirvana</title>
      <description>&lt;p&gt;Das Kopieren von Dokumentinhalten von einem Dokument in das Andere ist ein weites und interessantes Thema im Kontext Word2007/2010 und OpenXml SDK. Hierbei können verschiedenste Abhängigkeiten eine große Rolle spielen. Werden beispielsweise Hyperlink beinhaltende Dokumentteilte kopiert, ist die Überraschung groß. Der Link verweist unter Umständen nicht nur ins Nirvana, er ist selbst vollständig dorthin gewandert. Warum das so ist und was man dagegen machen kann, möchte ich am Beispiel des Kopierens von Inhalten aus einem MainDocument zeigen.&lt;/p&gt;  &lt;p&gt;Hyperlinks werden als eigenständiges Element &lt;em&gt;w:hyperlink&lt;/em&gt; zwischen Paragraphen &lt;em&gt;w:p&lt;/em&gt; und Runs &lt;em&gt;w:r&lt;/em&gt; abgelegt. Alternativ zum &lt;em&gt;w:p&lt;/em&gt; kann als parent Element auch häufig ein &lt;em&gt;w:sdtContent&lt;/em&gt;, ein ContentControl, vorliegen.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_6MDRCGJmRdA/S5wctR6obhI/AAAAAAAAAIk/ohufAn_PLUo/s1600-h/Hyplerlink%5B4%5D.png"&gt;&lt;img title="Hyplerlink" style="display:inline;" height="212" alt="Hyplerlink" src="http://lh6.ggpht.com/_6MDRCGJmRdA/S5wct5hC2nI/AAAAAAAAAIo/njbLhpgbVG8/Hyplerlink_thumb%5B2%5D.png?imgmax=800" width="478" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Das wichtigste Attribut eines Hyperlinks ist das Attribut &lt;em&gt;r:id&lt;/em&gt;. Dieses verweist auf eine externe Beziehung, die in dem Dokument &lt;em&gt;document.xml.rels &lt;/em&gt;in dem Unterordner &lt;em&gt;_rels&lt;/em&gt; innerhalb der Package Struktur hinterlegt wird.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_6MDRCGJmRdA/S5wcujutqrI/AAAAAAAAAIs/jJJYJ6POudY/s1600-h/ordner%5B4%5D.png"&gt;&lt;img title="ordner" style="display:inline;" height="97" alt="ordner" src="http://lh5.ggpht.com/_6MDRCGJmRdA/S5wcxy65IsI/AAAAAAAAAIw/obELmKgZi1s/ordner_thumb%5B2%5D.png?imgmax=800" width="361" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Bei dem Attribut &lt;em&gt;w:history&lt;/em&gt; handelt es sich um einen &lt;em&gt;OnOffValue&lt;/em&gt;, im Prinzip einen Boolschen-Wert, durch den angezeigt wird, ob diesem Link bereits gefolgt wurde.&lt;/p&gt;  &lt;p&gt;Öffne ich nun dasDokument &lt;em&gt;document.xml.rels&lt;/em&gt; finde ich unter der ID 4 den folgenden Eintrag.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;&lt;font color="#800000"&gt;Relationship&lt;/font&gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;Id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;rId4&amp;quot;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#ff0000"&gt;Type&lt;/font&gt;&lt;font color="#0000ff"&gt;=”&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink&lt;/font&gt;”&lt;/font&gt;&lt;font face="Courier New"&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;Target&lt;/font&gt;&lt;font color="#0000ff"&gt;=”&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color="#0000ff"&gt;http://jcselke.blogspot.com&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;“          &lt;br /&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;TargetMode&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;External&amp;quot;&lt;/font&gt; /&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Damit ist auch schon geklärt, weshalb Hyperlinks verschwinden. Sie werden also als Externe Beziehung abgelegt, in der die Ziel URL des Hyperlinks hinterlegt ist. Diese werden natürlich nicht durch einfaches Kopieren von Inhalten aus dem Dokument übernommen und gehen daher verloren.&lt;/p&gt;  &lt;p&gt;Gut, das bloße Kopieren der Inhalte reicht also nicht aus. Was kann aber getan werden? Eine Lösung kann es sein, durch alle &lt;em&gt;HyperlinkRelationships&lt;/em&gt; des Mainparts zu iterieren und diese Stück für Stück in das Zieldokument zu übertragen. Dazu werden Ausgangs- und Zieldokument geöffnet und die Inhalte, in diesem Fall durch Zuweisen des &lt;em&gt;InnerXml, &lt;/em&gt;kopiert.&lt;/p&gt;  &lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: true; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;public void ImportContent()&lt;br /&gt;{&lt;br /&gt;    using (var package = WordprocessingDocument.Open(&amp;quot;c:\\test\\hyperlink.docx&amp;quot;, true))&lt;br /&gt;    {&lt;br /&gt;        var mainDocumentPartSource = package.MainDocumentPart;&lt;br /&gt;        var documentSource = mainDocumentPartSource.Document;&lt;br /&gt;        using (var packageTarget = WordprocessingDocument.Open(&amp;quot;c:\\test\\hyperlink_target.docx&amp;quot;, true))&lt;br /&gt;        {&lt;br /&gt;            var mainDocumentPartTarget = packageTarget.MainDocumentPart;&lt;br /&gt;            mainDocumentPartTarget.Document.InnerXml = documentSource.InnerXml;&lt;br /&gt;            this.TransferHyperlinks(mainDocumentPartSource, mainDocumentPartTarget);&lt;br /&gt;            mainDocumentPartTarget.Document.Save();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Im Anschluss wird in der Methode &lt;em&gt;TransferHyperlinks()&lt;/em&gt; eine neue &lt;em&gt;HyperlinkRelationship&lt;/em&gt; erzeugt und die alten Werte des zu kopierenden Hyperlinks werden übernommen. Dann wird im Zieldokument das Hyperlink anhand der bisherigen Id identifiziert und die alte Id durch die der neuen HyperlinkRelationship ersetzt.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: true; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;private void TransferHyperlinks(OpenXmlPartContainer openXmlPartContainer, MainDocumentPart mainDocumentPartTarget)&lt;br /&gt;{&lt;br /&gt;    foreach (var hyperlinkRel in openXmlPartContainer.HyperlinkRelationships)&lt;br /&gt;    {&lt;br /&gt;        var newHyperLinkRel = mainDocumentPartTarget.AddHyperlinkRelationship(hyperlinkRel.Uri, hyperlinkRel.IsExternal);&lt;br /&gt;        var relationship = hyperlinkRel;&lt;br /&gt;        var importedHyperlink = mainDocumentPartTarget&lt;br /&gt;            .Document.Descendants&amp;lt;Hyperlink&amp;gt;()&lt;br /&gt;            .Where(x =&amp;gt; x.Id == relationship.Id).First();&lt;br /&gt;        importedHyperlink.Id = newHyperLinkRel.Id;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So lässt sich natürlich auch mit allen anderen Parts verfahren, die Hyperlinks enthalten können. Da wären vor allem aber nicht ausschließlich Header- und FooterParts zu nennen.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5601714198208780275-4493801836762990612?l=jcselke.blogspot.com" alt="" /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/jcselke?a=MM3OgRqSSvs:q26lPqm3Ryc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/jcselke?d=yIl2AUoC8zA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/jcselke?a=MM3OgRqSSvs:q26lPqm3Ryc:xZ3Pn_mapoI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/jcselke?d=xZ3Pn_mapoI" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jcselke/~4/MM3OgRqSSvs" height="1" width="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/blogspot/jcselke/~3/MM3OgRqSSvs/hyperlinks-in-das-word-nirvana.html</link>
      <author>Jan Christian Selke</author>
      <dc:creator>Jan Christian Selke</dc:creator>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-5601714198208780275.post-4493801836762990612</guid>
      <pubDate>Sun, 14 Mar 2010 00:16:00 GMT</pubDate>
    </item>
    <item>
      <title>Wie verwende ich den Meta-Tag robots in meinem Blog?</title>
      <description>&lt;p&gt;&lt;img style="margin:0px 15px 15px 0px;display:inline;" title="Suchmaschinenrobot" alt="Suchmaschinenrobot" align="left" src="http://blog.klaus-b.net/image.axd?picture=WindowsLiveWriter/37cf8e8828cd_F251/search-engine-robot_3.png" width="50" height="70" /&gt;&lt;/p&gt;  &lt;p&gt;Bewusst, dynamisch und abhängig von der gerade aufgerufenen Seite. Aber dazu später mehr.    &lt;br /&gt;Der &lt;a title="robots Meta-Tag" href="http://de.wikipedia.org/wiki/Robots_Exclusion_Standard#Meta-Tags" rel="wiki nofollow"&gt;Meta-Tag robots&lt;/a&gt; ist eines der wertvollsten Werkzeuge im Umgang mit Suchmaschinen, wird aber oft, gerade in der deutschen .NET Blogosphäre, sträflich vernachlässigt. Die meisten Blogs verwenden den &lt;strong&gt;robots-Tag&lt;/strong&gt; mit den Werten &lt;em&gt;index, follow &lt;/em&gt;in jeder Seite ihres Blog. Viele Blogs verwenden den Tag gar nicht, was den vorherigen Werten gleich kommt. Manches Blog, ich will hier keine Namen nennen, verwendet den Tag gleich mehrfach in einer Seite, erst mit &lt;em&gt;noindex, &lt;/em&gt;&lt;a title="Wert nofollow für das rel-Attribut" href="http://de.wikipedia.org/wiki/Nofollow" rel="wiki nofollow"&gt;nofollow&lt;/a&gt; und drei Zeilen weiter mit&lt;em&gt; index, follow.&lt;/em&gt;     &lt;br /&gt;Wie man an diesen Beispielen bereits sehen kann, machen sich die wenigsten Blogbetreiber Gedanken darüber, wie eine Suchmaschine mit dem Inhalt des Blog umgehen soll. Frei nach dem Motto: &lt;a title="Google Suchmaschiene" href="http://google.com/" rel="nofollow"&gt;Google&lt;/a&gt;, &lt;a title="Yahoo Suchmaschine" href="http://yahoo.com/" rel="nofollow"&gt;Yahoo&lt;/a&gt;, &lt;a title="Bing Suchmaschine" href="http://bing.com/" rel="nofollow"&gt;Bing&lt;/a&gt; und wie sie nicht alle heißen, werden es schon richten.     &lt;br /&gt;Das tun sie auch, aber bestimmt anders als der Blogbetreiber vielleicht will.&lt;/p&gt;  &lt;p&gt;Was macht so ein Spider, oder auch &lt;a title="Crawler" href="http://de.wikipedia.org/wiki/Crawler" rel="wiki nofollow"&gt;Crawler&lt;/a&gt; genannt, mit unseren Blogs?     &lt;br /&gt;Er ist hungrig nach Futter und seine Lieblingsspeise ist nun mal Text. Der erste Kontakt mit einem Blog ist meist die Startseite. Hier sind in typischer Manier die letzten Artikel, entweder als &lt;a title="Teaser" href="http://de.wikipedia.org/wiki/Teaser" rel="wiki nofollow"&gt;Teaser&lt;/a&gt; oder manchmal als kompletter Artikel, aufgeführt. Für den Crawler ist das schon eine ganze Menge. Ein hat mehrere Überschriften mit H1 oder H2 Tags und einiges an zugehörigem Text. Wenn sich jetzt im Teaser unter der jeweiligen Überschrift einige Wörter aus eben dieser Überschrift wiederfinden, ist der Crawler schon glücklich. Wird in der Startseite auch noch der &lt;strong&gt;robots-Tag&lt;/strong&gt; mir &lt;em&gt;index, follow&lt;/em&gt; verwendet, hat er was er will. Die Startseite landet im Index.    &lt;br /&gt;Bei Webseiten, die oftmals sehr viel Wert auf die Startseite legen, mag dieses Verhalten ja gewünscht sein. Ich spreche hier aber von einem Blog. Ich will nicht meine Startseite im Index einer Suchmaschine sehen, sondern meine Artikel.     &lt;br /&gt;Nehmen wir an, der Crawler folgt von der Startseite aus dem Link zum Artikel. Er analysiert diesen Artikel und stellt fest, dass Teile des Inhalts bereits im Index vorhanden sind. Was soll ihn nun dazu bewegen diese Artikelseite ebenfalls in den Index mit aufzunehmen? Er hat doch bereits auf der Startseite gefunden was er wollte.&lt;/p&gt;  &lt;p&gt;Nun gut, dieses Szenario ist wahrscheinlich stark überzeichnet. In Wirklichkeit sind noch ganz andere Faktoren von Bedeutung. Welche genau weiß ich nicht, denn ich bin kein SEO-Fachmann. Nichtsdestotrotz sagt mir der gesunde Menschenverstand, dass der oben geschilderte Fall sich ziemlich sicher so verhält. Was also tun?&lt;/p&gt;  &lt;p&gt;Kurz und knapp, ein radikaler Schnitt. Alle Übersichtsseiten, dazu gehört auch die Startseite, werden mit den Werten &lt;em&gt;noindex, follow&lt;/em&gt; im &lt;strong&gt;Meta-Tag robots&lt;/strong&gt; versehen. Klingt schmerzhaft? Ist es für den Moment auch.    &lt;br /&gt;Ich habe mich vor ca. drei Monaten getraut diesen Schritt zu tun. Anfangs fiel die Anzahl der indizierten Seiten meines Blog ins Bodenlose. Aber nach und nach zeigte sich der gewünschte Effekt. Mittlerweile sind die verschiedenen Artikel im Index und ranken auf den vorderen Plätzen in den &lt;a title="Suchmaschinenranking" href="http://de.wikipedia.org/wiki/Suchmaschinenranking" rel="wiki nofollow"&gt;SERPs&lt;/a&gt;.     &lt;br /&gt;Bei einer Suche zu den Begriffen &lt;a title="Suche nach shared memory .net bei Google" href="http://www.google.de/search?hl=de&amp;amp;source=hp&amp;amp;q=shared+memory+.net&amp;amp;meta=&amp;amp;aq=0&amp;amp;aqi=g1&amp;amp;aql=&amp;amp;oq=shared+memory+.net" rel="nofollow"&gt;shared memory .net in Google&lt;/a&gt; wird mein Blog auf der ersten Seite gelistet. Wenn diese Suche auf &lt;em&gt;Seiten aus Deutschland&lt;/em&gt; begrenzt wird, werden sogar zwei Artikel meines Blog auf der ersten Seite gelistet. Die &lt;a title="Suche nach shared memory .net bei Bing" href="http://www.bing.com/search?q=shared%20memory%20.net&amp;amp;mkt=de-de&amp;amp;FORM=TOOLBR&amp;amp;DI=2883&amp;amp;CE=14.0&amp;amp;CM=SearchWeb" rel="nofollow"&gt;gleiche Suche bei Bing&lt;/a&gt;, listet mich auf die beiden ersten Plätze. Auch mit dem Begriff &lt;em&gt;Web Slice&lt;/em&gt; wird mein Blog sowohl bei Google als auch bei Bing auf der ersten Seite gelistet; und das bei 13 Millionen Ergebnissen bei Bing und über 15 Millionen bei Google. Ich bin mit diesem Ergebnis mehr als zufrieden.&lt;/p&gt;  &lt;p&gt;Programmtechnisch ist die dynamische Verwendung des &lt;strong&gt;robots-Tag&lt;/strong&gt; nicht schwer umzusetzen.    &lt;br /&gt;Da &lt;a title="Blogengine.NET. An innovative open source blogging platform developed with ASP.NET 2.0" href="http://www.dotnetblogengine.net/" rel="nofollow"&gt;BlogEngine.NET&lt;/a&gt; nur einen &lt;a title="ContentPlaceHolder Klasse" href="http://msdn.microsoft.com/1k8dts1d.aspx" rel="msdn nofollow"&gt;ContentPlaceHolder&lt;/a&gt; in der &lt;a title="MasterPage Klasse" href="http://msdn.microsoft.com/tf5e2ex3.aspx" rel="msdn nofollow"&gt;MasterPage&lt;/a&gt; des jeweiligen Theme verwendet, ist der Weg über den Head-Bereich im Markup verbaut. Eine rein codebasierende Variante ist allerdings auch nicht schwerer zu verwirklichen.    &lt;br /&gt;Da auf die einzelnen Meta-Tags im Header über einen &lt;a title="ControlCollection Klasse" href="http://msdn.microsoft.com/kbe31ba9.aspx" rel="msdn nofollow"&gt;ControlCollection&lt;/a&gt; zugegriffen werden kann, ist der &lt;strong&gt;robots-Tag&lt;/strong&gt; einfach zu finden. Wenn der Meta-Tag gefunden wurde, wird der entsprechende Wert gesetzt. Sollte er nicht gefunden werden, wird der Tag mit dem entsprechenden Wert der ControlCollection hinzugefügt.    &lt;br /&gt;In eine Methode verpackt, muss dieser Methode nur noch der gewünschte Wert mitgegeben werden. Um Code-Redundanz zu vermeiden, wird die Methode als statische Methode in einer Hilfsklasse verwendet, der als zweiter Parameter die aktuelle &lt;a title="Page Klasse" href="http://msdn.microsoft.com/dfbt9et1.aspx" rel="msdn nofollow"&gt;Page&lt;/a&gt;-Instanz mitgegeben wird.&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:812469c5-0cb0-4c63-8c15-c81123a09de7:fae8ab46-2750-4c9d-920e-9c8dfc967714" class="wlWriterEditableSmartContent"&gt;&lt;pre class="c#:firstline[103]"&gt;public static void AddMetaRobots(string metaContent, Page page)
{
    HtmlMeta tag = null;

    foreach (Control ctrl in page.Header.Controls)
    {
        if (ctrl is HtmlMeta
            &amp;amp;&amp;amp; ((HtmlMeta)ctrl).Name.ToLowerInvariant() == &amp;quot;robots&amp;quot;)
        {
            tag = (HtmlMeta)ctrl;
            tag.Content = metaContent;
            break;
        }
    }

    if (tag == null)
    {
        var meta = new HtmlMeta();
        meta.Name = &amp;quot;robots&amp;quot;;
        meta.Content = metaContent;

        page.Header.Controls.Add(meta);
    }
}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So kann nun einfach in jeder Seite des Blog der richtige Wert für den &lt;strong&gt;robots-Tag&lt;/strong&gt; gesetzt werden. In der Startseite, dem Archiv, im Web Slice Container und der Übersichtsseite für Artikelserien wird der Wert &lt;em&gt;noindex, follow&lt;/em&gt; gesetzt. Im &lt;a title="Control.Load Ereignis" href="http://msdn.microsoft.com/abk3yt37.aspx" rel="msdn nofollow"&gt;Page_Load&lt;/a&gt; Ereignis der jeweiligen Seite braucht nur ein Aufruf der obigen Methode zu erfolgen:&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:812469c5-0cb0-4c63-8c15-c81123a09de7:09a3f572-3b5e-41f5-b412-ca7416e79f3d" class="wlWriterEditableSmartContent"&gt;&lt;pre class="c#:firstline[107]"&gt;BlogUtils.AddMetaRobots(&amp;quot;noindex, follow&amp;quot;, this.Page);&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In den Artikel- und statischen Seiten wird dementsprechend &lt;em&gt;index, follow&lt;/em&gt; gesetzt.&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:812469c5-0cb0-4c63-8c15-c81123a09de7:1d6fff51-00a0-4471-97a6-4a5213568a49" class="wlWriterEditableSmartContent"&gt;&lt;pre class="c#:firstline[31]"&gt;BlogUtils.AddMetaRobots(&amp;quot;index, follow&amp;quot;, base.Page);&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Fazit:&lt;/h3&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Wenn mir als Blogbetreiber von den einschlägigen Suchmaschinen ein Werkzeug zur Steuerung der Suchmaschinenbots zur Verfügung gestellt wird, warum sollte ich es dann nicht nutzen?
  &lt;br /&gt;In der heutigen Zeit, mit &lt;a title="Die Anzahl der Websites im Internet überschritten 186,7 Mio." href="http://linuxunited.org/de/3366.html"&gt;über 180 Millionen Seiten im Internet&lt;/a&gt;, ist die Auswahl an Informationen nahezu unüberschaubar. Die Anzahl der SERPs jeder Suchanfrage steigen ständig. Wie soll unter diesen Voraussetzungen ein Artikel meines Blog überhaupt gefunden werden? Wenn ich nichts dafür tue, mit Sicherheit gar nicht.&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:e3b9a85a-37df-4f75-a9d1-c00c7ae23648" class="wlWriterEditableSmartContent"&gt;Technorati-Tags: &lt;a href="http://technorati.com/tags/asp.net" title="asp.net" rel="tag"&gt;asp.net&lt;/a&gt; | &lt;a href="http://technorati.com/tags/blogengine.net" title="blogengine.net" rel="tag"&gt;blogengine.net&lt;/a&gt; | &lt;a href="http://technorati.com/tags/meta-tag" title="meta-tag" rel="tag"&gt;meta-tag&lt;/a&gt; | &lt;a href="http://technorati.com/tags/robots" title="robots" rel="tag"&gt;robots&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://blog.klaus-b.net/post/2010/03/13/Wie-verwende-ich-den-Meta-Tag-robots-in-meinem-Blog.aspx</link>
      <author>Klaus Bock</author>
      <dc:creator>Klaus Bock</dc:creator>
      <comments>http://blog.klaus-b.net/post/2010/03/13/Wie-verwende-ich-den-Meta-Tag-robots-in-meinem-Blog.aspx#comment</comments>
      <guid isPermaLink="False">http://blog.klaus-b.net/post.aspx?id=3264292e-2435-44e8-9445-448ed46111dc</guid>
      <pubDate>Sat, 13 Mar 2010 17:44:38 GMT</pubDate>
    </item>
    <item>
      <title>Git, Mercurial und die PowerShell</title>
      <description>&lt;p&gt; &lt;/p&gt;  &lt;p&gt;Ich versuche seit ein paar Tagen die cmd.exe durch die PowerShell abzulösen. Ist so einiges anders, aber dies ist hier nicht das Thema.&lt;/p&gt;  &lt;p&gt;Dabei bin ich auf zwei Skripte für die PowerShell gestoßen mit denen man sich a) den Status eine Git-Repositories als &lt;a href="http://www.markembling.info/view/my-ideal-powershell-prompt-with-git-integration)" target="_blank"&gt;Command-Prompt&lt;/a&gt; anzeigen lassen kann, sowie b) git ein wenig &lt;a href="http://www.jeremyskinner.co.uk/2010/03/07/using-git-with-windows-powershell/)" target="_blank"&gt;Tab-Completion&lt;/a&gt; beibringt (Befehle und Repositories).&lt;/p&gt;  &lt;p&gt;Ich habe es ein wenig refakttorisiert, zusammengefasst, für mich verbessert und auch noch Mercurial Support eingebaut. Es sind meine erste Schritte in der PowerShell, also hab nachsicht ;).&lt;/p&gt;  &lt;p&gt;So schaut es aus.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px auto;display:block;float:none;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://der-albert.com/images/der-albert_com/WindowsLiveWriter/GitundMercurialunddiePowerShell_F8BB/image_758ff6bf-25fd-44dc-a541-737bcf80c955.png" width="516" height="320" /&gt; &lt;/p&gt;  &lt;p&gt;Sofern es in Hg oder Git Repository ist so wird dies in der Titel-Leiste angezeigt, dort ist auch der vollständige Pfad zu sehen, während im Prompt nur der aktuelle Verzeichnisname steht.&lt;/p&gt;  &lt;p&gt;Zwischen den Klammern sind dann die Repository Informationen, der Name des aktuellen Branches (in Rot wenn es nicht erfasste Dateien gibt), danach folgen Zahlen die mit +, ~ und - als Vorzeichen. + bedeuten hingefügte Dateien, ~ die geänderten und – gibt die gelöschten Dateien an.&lt;/p&gt;  &lt;p&gt;An ein paar Stellen wo bei git und hg die Befehle stehen oder wo Namen von Branches und Remotes gebraucht werden können die mit Tab-Completion durchgetabt werden.&lt;/p&gt;  &lt;p&gt;Das ganze ist sicher noch nicht vollständig oder optimal, aber es ist ein Anfang.&lt;/p&gt;  &lt;p&gt;Hiermit stelle ich es der Allgemeinheit zu Verfügung und hoffe dass es sich ein wenig weiterentwickelt.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://github.com/DerAlbertCom/GitHgPowerShell"&gt;http://github.com/DerAlbertCom/GitHgPowerShell&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Um diese zu verwenden einfach die beiden Skripte nach &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;%USERPROFILE%\My Documents\WindowsPowerShell&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;kopieren (getestet unter Windows 7). Wenn schon eine profile.ps1 vorhanden ist muss natürlich aufgepasst werden und das ganze Integriert werden.&lt;/p&gt;  &lt;p&gt;Viel Spaß damit und forkt fleißig um das ganze zu verbessern ;)&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:4f631b82-d99f-414f-8825-878106f099cb" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/git" rel="tag"&gt;git&lt;/a&gt;,&lt;a href="http://technorati.com/tags/mercurial" rel="tag"&gt;mercurial&lt;/a&gt;,&lt;a href="http://technorati.com/tags/hg" rel="tag"&gt;hg&lt;/a&gt;,&lt;a href="http://technorati.com/tags/powershell" rel="tag"&gt;powershell&lt;/a&gt;&lt;/div&gt;&lt;img src="http://der-albert.com/aggbug/197.aspx" width="1" height="1" alt="" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/der-albert-com?a=3LixgrAUdgs:P-t0_Id4R5Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/der-albert-com?d=yIl2AUoC8zA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/der-albert-com?a=3LixgrAUdgs:P-t0_Id4R5Q:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/der-albert-com?d=7Q72WNTAKBA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/der-albert-com?a=3LixgrAUdgs:P-t0_Id4R5Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/der-albert-com?i=3LixgrAUdgs:P-t0_Id4R5Q:V_sGLiPBpWU" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/der-albert-com?a=3LixgrAUdgs:P-t0_Id4R5Q:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/der-albert-com?d=G79ilh31hkQ" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/der-albert-com?a=3LixgrAUdgs:P-t0_Id4R5Q:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/der-albert-com?i=3LixgrAUdgs:P-t0_Id4R5Q:D7DqB2pKExk" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/der-albert-com/~4/3LixgrAUdgs" height="1" width="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/der-albert-com/~3/3LixgrAUdgs/git-mercurial-und-die-powershell.aspx</link>
      <author>Albert Weinert</author>
      <dc:creator>Albert Weinert</dc:creator>
      <comments>http://der-albert.com/archive/2010/03/13/git-mercurial-und-die-powershell.aspx#feedback</comments>
      <guid isPermaLink="False">http://der-albert.com/archive/2010/03/13/git-mercurial-und-die-powershell.aspx</guid>
      <pubDate>Sat, 13 Mar 2010 17:41:19 GMT</pubDate>
    </item>
    <item>
      <title>#9 im Kino</title>
      <description>Das finde ich ja mal eine gute Nachricht. Der damals (2005) schon sehr populäre Kurzfilm 9 von Shane Acker kommt in unsere Kinos. Für diesen Kurzfilm wurde Acker zum Academy Award nominiert. (Ob er ihn auch bekommen hat? Keine Ahnung.)
Für alle diejenigen, die den Kurzfilm noch nicht kennen, hier in &amp;#8220;voller Länge&amp;#8221;.

Und hier der Trailer</description>
      <link>http://www.biggle.de/blog/9-im-kino</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/9-im-kino#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/?p=4143</guid>
      <pubDate>Sat, 13 Mar 2010 13:25:09 GMT</pubDate>
    </item>
    <item>
      <title>ObservableCollection myLinks</title>
      <description>Mongo DB ist eine &amp;#8220;Open Source&amp;#8221; dokumentenorientierte  Datenbank (document oriented database). Das weit verbreiteste DBMS mit einer dokumentenorientierten Datenbank heisst Lotus Notes
Einige Links zu MongoDB





Offizielle Website


http://www.mongodb.org




MongoDB Wiki


http://en.wikipedia.org/wiki/MongoDB




MongoDB for CSharp


http://github.com/samus/mongodb-csharp




MongoDB for CSharp   II


http://odetocode.com/Blogs/scott/archive/2009/10/13/experimenting-with-mongodb-from-c.aspx




YouTube Video


http://www.youtube.com/watch?v=dOP3w-9Q6lU




Linq2MongoDB


http://www.claassen.net/geek/blog/2009/09/linq2mongodb-building-linq-provider-for.html




MongoDB im   Dauerstress


http://blogs.msdn.com/dparys/archive/2010/03/12/mongodb-im-stress-test.aspx




CouchDB vs.   MongoDB Benchmark


http://www.snailinaturtleneck.com/blog/2009/06/29/couchdb-vs-mongodb-benchmark/




Using MongoDB with   Visual Studio


http://somewebguy.wordpress.com/2010/02/09/using-mongodb-with-visual-studio/




(Video)   Understanding ObjectId in</description>
      <link>http://www.biggle.de/blog/observablecollection-links</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/observablecollection-links#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/?p=4130</guid>
      <pubDate>Fri, 12 Mar 2010 15:18:12 GMT</pubDate>
    </item>
    <item>
      <title>MongoDb im Stress Test</title>
      <description>Ich habe mich ein wenig mit MongoDB beschäftigt, ich finde den Ansatz interessant Daten einfach als Binary JSON ablegen zu können. Ich wollte allerdings wissen wie der Einsatz von MongoDB in einer Web Anwendung aussieht. Hierzu habe ich eine ASP.NET MVC Anwendung verwendet die lediglich Daten anzeigt, erzeugt und aktualisert. Dazu erzeuge ich in jedem Request einen Connect und Disconnecte mich wieder im Dispose Event vom Controller. Diese Anwendung habe ich mittels eines Web Tests in Visual Studio...(&lt;a href="http://blogs.msdn.com/dparys/archive/2010/03/12/mongodb-im-stress-test.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9977444" width="1" height="1" alt="" /&gt;</description>
      <link>http://blogs.msdn.com/dparys/archive/2010/03/12/mongodb-im-stress-test.aspx</link>
      <author>Dariusz Parys</author>
      <dc:creator>Dariusz Parys</dc:creator>
      <guid isPermaLink="True">http://blogs.msdn.com/dparys/archive/2010/03/12/mongodb-im-stress-test.aspx</guid>
      <pubDate>Fri, 12 Mar 2010 13:56:36 GMT</pubDate>
    </item>
    <item>
      <title>Entity Framework 4 Webcast</title>
      <description>Gestern ist der MSDN Webcast zum Thema Entity Framework 4 – Was ist neu? erschienen. In diesem Webcast gehe ich vor allem auf eine neue Möglichkeit mit dem Entity Framework 4 zu arbeiten ein: Code First. Code First erlaubt es beliebige Objektmodelle auf ein relationales Schema zu mappen, ohne dabei Abhängigkeiten im Objektmodell auf das Entity Framework zu haben. Beispiel Die Klasse Firma hat Mitarbeiter. Diese beiden Klassen liegen in einem eigenen Assembly und könnten so aussehen: public class...(&lt;a href="http://blogs.msdn.com/dparys/archive/2010/03/12/entity-framework-4-webcast.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9977419" width="1" height="1" alt="" /&gt;</description>
      <link>http://blogs.msdn.com/dparys/archive/2010/03/12/entity-framework-4-webcast.aspx</link>
      <author>Dariusz Parys</author>
      <dc:creator>Dariusz Parys</dc:creator>
      <guid isPermaLink="True">http://blogs.msdn.com/dparys/archive/2010/03/12/entity-framework-4-webcast.aspx</guid>
      <pubDate>Fri, 12 Mar 2010 12:09:59 GMT</pubDate>
    </item>
    <item>
      <title>Neues in WPF 4</title>
      <description>Ich hab kürzlich die BASTA Spring 2010 besucht (über 500 Teilnehmer). Es war wirklich eine sehr informative Veranstaltung über aktuelle Entwicklungen im .NET Bereich. Folgender Abriss soll die Neuerungen im .NET Framework 4.0, Entity Framework 2, VisualStudio 2010, WPF 4 und Silverlight 4, aufzeigen.

Im folgenden Artikel möchte ich über einige Neuerungen in WPF 4.0  schreiben

Visual</description>
      <link>http://www.biggle.de/blog/neues-in-wpf-4</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/neues-in-wpf-4#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/?p=4121</guid>
      <pubDate>Fri, 12 Mar 2010 11:10:57 GMT</pubDate>
    </item>
    <item>
      <title>Neuerungen in Visual Studio 2010</title>
      <description>Ich hab kürzlich die BASTA Spring 2010 besucht (über 500 Teilnehmer). Es war wirklich eine sehr informative Veranstaltung über aktuelle Entwicklungen im .NET Bereich. Folgender Abriss soll die Neuerungen im .NET Framework 4.0, Entity Framework 2, VisualStudio 2010, WPF 4 und Silverlight 4, aufzeigen.

Im folgenden Artikel möchte ich über einige Neuerungen in Visual Studio 2010</description>
      <link>http://www.biggle.de/blog/neuerungen-in-visual-studio-2010</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/neuerungen-in-visual-studio-2010#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/?p=4104</guid>
      <pubDate>Fri, 12 Mar 2010 10:48:11 GMT</pubDate>
    </item>
    <item>
      <title>Weitere Neuerungen im .NET Framework 4.0</title>
      <description>Ich hab kürzlich die BASTA Spring 2010 besucht (über 500 Teilnehmer). Es war wirklich eine sehr informative Veranstaltung über aktuelle Entwicklungen im .NET Bereich. Folgender Abriss soll die Neuerungen im .NET Framework 4.0, Entity Framework 2, VisualStudio 2010, WPF 4 und Silverlight 4, aufzeigen.

Im folgenden Artikel möchte ich über weitere kleine Neuerungen und Veränderungen im</description>
      <link>http://www.biggle.de/blog/weitere-neuerungen-veraenderungen-im-net-framework-4-0</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/weitere-neuerungen-veraenderungen-im-net-framework-4-0#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/?p=4090</guid>
      <pubDate>Fri, 12 Mar 2010 10:03:21 GMT</pubDate>
    </item>
    <item>
      <title>Parallele Programmierung mit .NET 4.0</title>
      <description>Ich hab kürzlich die BASTA Spring 2010 besucht (über 500 Teilnehmer). Es war wirklich eine sehr informative Veranstaltung über aktuelle Entwicklungen im .NET Bereich. Folgender Abriss soll die Neuerungen im .NET Framework 4.0, Entity Framework 2, VisualStudio 2010, WPF 4 und Silverlight 4, aufzeigen.

Im folgenden Artikel möchte ich über das Neue in der parallelen Programmierung</description>
      <link>http://www.biggle.de/blog/parallele-programmierung-mit-net-4-0</link>
      <author>Mario Priebe</author>
      <dc:creator>Mario Priebe</dc:creator>
      <comments>http://www.biggle.de/blog/parallele-programmierung-mit-net-4-0#comments</comments>
      <guid isPermaLink="False">http://www.biggle.de/blog/?p=4074</guid>
      <pubDate>Fri, 12 Mar 2010 09:35:29 GMT</pubDate>
    </item>
    <item>
      <title>Ich werde nicht schreiben…</title>
      <description>&lt;p&gt;… dass das die RTM des ASP.NET MVC 2.0 für .NET 3.5 und Visual Studio 2008 draußen ist. Das haben andere bereits zur Genüge getan.    &lt;br /&gt;(Und wahrscheinlich werden es im Laufe des Tage noch einige mehr tun.)&lt;/p&gt;  &lt;p&gt;Hier eine kleine Auswahl:&lt;/p&gt;  &lt;p&gt;Alexander Zeitler:    &lt;br /&gt;&lt;a href="http://blog.alexonasp.net/post/2010/03/11/ASPNET-MVC-2-RTM-e28093-fur-NET-Framework-35-SP-1-Visual-Studio-2008.aspx"&gt;ASP.NET MVC 2 RTM – für .NET Framework 3.5 SP 1 / Visual Studio 2008&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Robert Mühsig:   &lt;br /&gt;&lt;a href="http://code-inside.de/blog/2010/03/12/asp-net-mvc-2-ist-rtm-fr-vs2008/"&gt;ASP.NET MVC 2 ist RTM (für VS2008)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Scott Guthrie:   &lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/03/11/asp-net-mvc-2-released.aspx"&gt;ASP.NET MVC 2 Released&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Scott Hanselmann:   &lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/ASPNETMVC2Released.aspx"&gt;ASP.NET MVC 2 Released&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Phil Haak:   &lt;br /&gt;&lt;a href="http://haacked.com/archive/2010/03/11/aspnet-mvc2-released.aspx"&gt;ASP.NET MVC 2 Released!&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Shiju Varghese:   &lt;br /&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2010/03/11/asp-net-mvc-2-rtm-released.aspx"&gt;ASP.NET MVC 2 RTM Released !&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;ASP.NET:   &lt;br /&gt;&lt;a title="http://www.asp.net/mvc/" href="http://www.asp.net/mvc/"&gt;http://www.asp.net/mvc/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Außerdem gibt es Unterstützung für die Installation von ASP.NET MVC (per Web Plattform Installer), Anleitungen zur Migration von Version 1 nach Version 2. Die aktuellen Sourcen sind ebenfalls verfügbar unter codeplex.com (siehe obige Links)&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 4px 4px 4px;"&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/03/12/ich-werde-nicht-schreiben.aspx"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/03/12/ich-werde-nicht-schreiben.aspx&amp;amp;bgcolor=3169AD&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks-DE Image" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=216382" width="1" height="1" alt="" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jgutsch?a=DwSSW2JqPis:UHKhqfj4KZU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jgutsch?d=yIl2AUoC8zA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jgutsch?a=DwSSW2JqPis:UHKhqfj4KZU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jgutsch?i=DwSSW2JqPis:UHKhqfj4KZU:F7zBnMyn0Lo" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jgutsch?a=DwSSW2JqPis:UHKhqfj4KZU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jgutsch?i=DwSSW2JqPis:UHKhqfj4KZU:V_sGLiPBpWU" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jgutsch?a=DwSSW2JqPis:UHKhqfj4KZU:mNpC_eAfmKU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jgutsch?d=mNpC_eAfmKU" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jgutsch/~4/DwSSW2JqPis" height="1" width="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/jgutsch/~3/DwSSW2JqPis/ich-werde-nicht-schreiben.aspx</link>
      <author>Jürgen Gutsch</author>
      <dc:creator>Jürgen Gutsch</dc:creator>
      <guid isPermaLink="False">http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/03/12/ich-werde-nicht-schreiben.aspx</guid>
      <pubDate>Fri, 12 Mar 2010 00:40:00 GMT</pubDate>
    </item>
    <item>
      <title>ASP.NET MVC 2 ist RTM (für VS2008)</title>
      <description>Das Team rund um Phil Haack hat die RTM Version von ASP.NET MVC 2 fertiggestellt. In den Release Notes finden sich Informationen über Änderungen gegenüber den RCs. Für Leute die eine ASP.NET MVC 1 Applikation haben und migrieren möchten sollten einen Blick auf das Migration Tool vom ASP.NET MVC Team werfen.
Momentan ist die RTM nur [...]SHARETHIS.addEntry({ title: &amp;quot;ASP.NET MVC 2 ist RTM (f&amp;#252;r VS2008)&amp;quot;, url: &amp;quot;http://code-inside.de/blog/2010/03/12/asp-net-mvc-2-ist-rtm-fr-vs2008/&amp;quot; });&lt;img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/nJz5txHL8DE" height="1" width="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/Code-insideBlog/~3/nJz5txHL8DE/</link>
      <author>Robert Mühsig</author>
      <dc:creator>Robert Mühsig</dc:creator>
      <comments>http://code-inside.de/blog/2010/03/12/asp-net-mvc-2-ist-rtm-fr-vs2008/#comments</comments>
      <guid isPermaLink="False">http://code-inside.de/blog/2010/03/12/asp-net-mvc-2-ist-rtm-fr-vs2008/</guid>
      <pubDate>Fri, 12 Mar 2010 00:33:27 GMT</pubDate>
    </item>
    <item>
      <title>ASP.NET Webforms Anwendungen und Ajax (Teil 6) kleine Tipps die das Leben leichter machen.</title>
      <description>&lt;p&gt;
In den letzten 5 Einträgen meines Blogs habe ich über verschiedene Möglichkeiten
geschrieben Ajax in einer ASP.NET Webforms zu implementieren.
&lt;/p&gt;
        &lt;p&gt;
Angefangen mit dem manuellen Weg über das &lt;a title="ASP.NET Webforms Anwendungen und Ajax (Teil 1)" href="http://blog.codemurai.de/2010/01/28/ASPNETWebformsAnwendungenUndAjaxTeil1.aspx" target="_blank"&gt;XmlHttpRequest
Objekt&lt;/a&gt; ging es weiter zu &lt;a title="ASP.NET Webforms Anwendungen und Ajax (Teil 2) Client Callbacks" href="http://blog.codemurai.de/2010/02/05/ASPNETWebformsAnwendungenUndAjaxTeil2ClientCallbacks.aspx" target="_blank"&gt;Client
Callbacks&lt;/a&gt;, dem &lt;a title="ASP.NET Webforms Anwendungen und Ajax (Teil 3) Das Updatepanel" href="http://blog.codemurai.de/2010/02/11/ASPNETWebformsAnwendungenUndAjaxTeil3DasUpdatepanel.aspx" target="_blank"&gt;Updatepanel&lt;/a&gt;,
dem &lt;a title="ASP.NET Webforms Anwendungen und Ajax (Teil 4) Scriptservices, Page Methods und das ASP.NET AJAX Framework" href="http://blog.codemurai.de/2010/02/18/ASPNETWebformsAnwendungenUndAjaxTeil4ScriptservicesPageMethodsUndDasASPNETAJAXFramework.aspx" target="_blank"&gt;ASP.NET
Ajax Framework&lt;/a&gt; sowie &lt;a title="ASP.NET Webforms Anwendungen und Ajax (Teil 5) Scriptservices, Page Methods und jQuery" href="http://blog.codemurai.de/2010/03/01/ASPNETWebformsAnwendungenUndAjaxTeil5ScriptservicesPageMethodsUndJQuery.aspx" target="_blank"&gt;jQuery&lt;/a&gt;.
&lt;/p&gt;
        &lt;p&gt;
Der Fokus meiner Beiträge lag darauf nicht nur einfach zu zeigen welche Möglichkeiten
es gibt, sondern zusätzlich auch zu zeigen, welche Datenmengen über die
Leitung gehen und ob bzw. welche Teile des ASP.NET Page Life Cycles durchlaufen werden.
&lt;/p&gt;
        &lt;p&gt;
Ich hoffe dass ich bei dem ein oder anderen Leser für manchen Aha Effekt sorgen
konnte. Zumindest ging es mir persönlich bei der ersten detaillierten Auseinandersetzung
mit dem Thema so. Schließlich ist man als ASP.NET Webforms Entwickler traditionell
doch eher auf dem Server zu Hause und realisiert vorerst garnicht welchen Overhead
Client Callbacks oder das Updatepanel mit sich bringen.
&lt;/p&gt;
        &lt;p&gt;
Mein persönliches Fazit ist, dass Updatepanel und Client Callbacks korrekt eingesetzt
in einigen Fällen vielleicht berechtigte Alternativen sind, in den meisten Fällen
jedoch zum Ajax Framework oder jQuery gegriffen werden sollte.
&lt;/p&gt;
        &lt;p&gt;
Meine zurzeit favorisierte Lösung ist - ähnlich wie bei vielen anderen sicherlich
auch - der Einsatz von jQuery.
&lt;/p&gt;
        &lt;p&gt;
Da mein letztes Beispiel noch ein wenig aufgebläht war, möchte ich an dieser
Stelle zwei kurze Tipps geben, die die Arbeit mit jQuery und Ajax ein wenig erleichtern.
&lt;/p&gt;
        &lt;p&gt;
Der erste Punkt beschäftigt sich mit der großen Redundanz zwischen den verschiedenen
Ajax Aufrufen:
&lt;/p&gt;
        &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8bf35d42-2e9f-4ae1-942a-b756979a3204" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
          &lt;pre class="js"&gt;$(&amp;quot;#StaticFileLink&amp;quot;).click(function(e) {
    e.preventDefault();
    $.ajax({
        type: &amp;quot;POST&amp;quot;,
        url: &amp;quot;Teil5.aspx/ReadStaticFile&amp;quot;,
        data: &amp;quot;{}&amp;quot;,
        contentType: &amp;quot;application/json; charset=utf-8&amp;quot;,
        dataType: &amp;quot;json&amp;quot;,
        success: function(msg) {
            $(&amp;quot;#content&amp;quot;).html(msg.d);
        }
    });
});

$(&amp;quot;#HelloWorldLink&amp;quot;).click(function(e) {
    e.preventDefault();
    $.ajax({
        type: &amp;quot;POST&amp;quot;,
        url: &amp;quot;AjaxDemoService.asmx/HelloWorld&amp;quot;,
        data: &amp;quot;{}&amp;quot;,
        contentType: &amp;quot;application/json; charset=utf-8&amp;quot;,
        dataType: &amp;quot;json&amp;quot;,
        success: function(msg) {
            $(&amp;quot;#content&amp;quot;).html(msg.d);
        }
    });
});

$(&amp;quot;#EchoLink&amp;quot;).click(function(e) {
    e.preventDefault();
    var number = $(&amp;quot;#EchoTextBox&amp;quot;).val();
    var jsonData = &amp;quot;{ &amp;#39;number&amp;#39; : &amp;#39;&amp;quot; + number + &amp;quot;&amp;#39;}&amp;quot;;
    $.ajax({
        type: &amp;quot;POST&amp;quot;,
        url: &amp;quot;AjaxDemoService.asmx/Echo&amp;quot;,
        data: jsonData,
        contentType: &amp;quot;application/json; charset=utf-8&amp;quot;,
        dataType: &amp;quot;json&amp;quot;,
        success: function(msg) {
            $(&amp;quot;#content&amp;quot;).html(msg.d);
        }
    });
});&lt;/pre&gt;
        &lt;/div&gt;
        &lt;p&gt;
Bereits beim ersten Blick auf den Quellcode fällt auf, dass die Werte einiger
Parameter statisch zu sein scheinen. So haben folgende Parameter stets einen fixen
Wert:
&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;
type 
&lt;/li&gt;
          &lt;li&gt;
contentType 
&lt;/li&gt;
          &lt;li&gt;
dataType 
&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
Außerdem ist zumindest in den ersten beiden Aufrufen auch der Eintrag für
data gleich.
&lt;/p&gt;
        &lt;p&gt;
Ein Weg um diese Redundanz herum zu kommen wäre eine eigene Funktion, die nur
die Variablen Parameter entgegen nimmt.
&lt;/p&gt;
        &lt;h4&gt;Standardwerte setzen
&lt;/h4&gt;
        &lt;p&gt;
Eine andere Alternative besteht darin, Standardwerte für jQuery Ajax Aufrufe
zu setzen. Dies sähe dann so aus:
&lt;/p&gt;
        &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:bbeda73f-39c7-4163-87ba-bb7344706009" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
          &lt;pre class="js"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
    $(document).ready(function() {
        $.ajaxSetup({
            type: &amp;quot;POST&amp;quot;,
            data: &amp;quot;{}&amp;quot;,
            contentType: &amp;quot;application/json; charset=utf-8&amp;quot;,
            dataType: &amp;quot;json&amp;quot;
        });
        $(&amp;quot;#StaticFileLink&amp;quot;).click(function(e) {
            e.preventDefault();
            $.ajax({
                url: &amp;quot;Teil6.aspx/ReadStaticFile&amp;quot;,
                success: function(msg) {
                    $(&amp;quot;#content&amp;quot;).html(msg.d);
                }
            });
        });

        $(&amp;quot;#HelloWorldLink&amp;quot;).click(function(e) {
            e.preventDefault();
            $.ajax({
                url: &amp;quot;AjaxDemoService.asmx/HelloWorld&amp;quot;,
                success: function(msg) {
                    $(&amp;quot;#content&amp;quot;).html(msg.d);
                }
            });
        });

        $(&amp;quot;#EchoLink&amp;quot;).click(function(e) {
            e.preventDefault();
            var number = $(&amp;quot;#EchoTextBox&amp;quot;).val();
            var jsonData = &amp;quot;{ &amp;#39;number&amp;#39; : &amp;#39;&amp;quot; + number + &amp;quot;&amp;#39;}&amp;quot;;
            $.ajax({
                url: &amp;quot;AjaxDemoService.asmx/Echo&amp;quot;,
                data: jsonData,
                success: function(msg) {
                    $(&amp;quot;#content&amp;quot;).html(msg.d);
                }
            });
        });
    });
&amp;lt;/script&amp;gt;&lt;/pre&gt;
        &lt;/div&gt;
        &lt;p&gt;
Neu hinzugekommen sind die Zeilen 2 - 8. Diese setzen Standardwerte für alle
folgenden Ajax Aufrufe. Diese Variante kann einiges an Code sparen, ist allerdings
mit Vorsicht zu genießen. Sollte nämlich zum Beispiel ein jQuery Plug-In
auf der Seite genutzt werden, dass auch die $.ajax Funktion nutzt, könnte es
zu Seiteneffekten kommen. Konkret wäre dies der Fall, wenn einer der per .ajaxSetup
gesetzten Parameter nicht überschrieben, aber mit einem anderen Wert erwartet
wäre. Typischerweise würde dies für den contentType oder oder dataType
geschehen.
&lt;/p&gt;
        &lt;h4&gt;Serialisieren - einfach gemacht
&lt;/h4&gt;
        &lt;p&gt;
Eine weitere Unschönheit des gezeigten Quellcodes besteht darin, dass die String
Variante des in JSON notierten Objekts data von Hand zusammen gebaut wurde. Dies ist
natürlich nicht sonderlich schick. Abhilfe schafft die Funktion stringify des
Objekts JSON. Einige Browser wie &lt;a title="JSON in Firefox 3.5" href="https://developer.mozilla.org/en/JSON#JSON.c2.a0in_Firefox_3.5" target="_blank"&gt;Firefox
ab Version 3.5&lt;/a&gt; oder &lt;a title="Native JSON in IE8" href="http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx" target="_blank"&gt;IE
ab der Version 8&lt;/a&gt; haben bereits ein eingebautes Objekt JSON. Für alle anderen
gibt es unter &lt;a title="http://www.json.org/js.html" href="http://www.json.org/js.html"&gt;http://www.json.org/js.html&lt;/a&gt; eine
JavaScript Library zum Download, die entsprechenden Support nachrüstet, falls
noch nicht vorhanden.
&lt;/p&gt;
        &lt;p&gt;
Konkret sähe dies dann wie folgt aus:
&lt;/p&gt;
        &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:dde58bec-9ed2-45cb-bb4e-402c8835d2d1" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
          &lt;pre class="js"&gt;&amp;lt;scripthttp://feedproxy.google.com src=&amp;quot;scripts/json2.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;

[ ... ]


$(&amp;quot;#EchoLink&amp;quot;).click(function(e) {
    e.preventDefault();
    var number = $(&amp;quot;#EchoTextBox&amp;quot;).val();
    var jsonData = { &amp;#39;number&amp;#39;: number };
    var jsonString = JSON.stringify(jsonData);
    $.ajax({
        url: &amp;quot;AjaxDemoService.asmx/Echo&amp;quot;,
        data: jsonString,
        success: function(msg) {
            $(&amp;quot;#content&amp;quot;).html(msg.d);
        }
    });&lt;/pre&gt;
        &lt;/div&gt;
        &lt;p&gt;
Wie man sieht, wird nun in Zeile 9 zuerst ein JavaScript Objekt jsonData in JSON Notation
erzeugt. Dies wird anschließend über JSON.stringify in Zeile 10 in einen
String konvertiert. Bei diesem konkreten Beispiel mag der Vorteil noch nicht auf der
Hand liegen, spätestens bei komplexen Objekten lernt man die Funktion stringify
jedoch schnell zu schätzen.
&lt;/p&gt;
        &lt;p&gt;
Bei der Recherche zu den Beiträgen dieser Serie bin ich übrigens auf einen
sehr gut geschriebenen Eintrag von &lt;a title="ASP.NET Update Panel, Callback und jQuery Webservice - Drei Ajax Techniken im Überblick" href="http://www.aspnetzone.de/blogs/robertobez/archive/2009/11/02/asp-net-Ajax-UpdatePanel-Callback-jQuery-Webservice.aspx" target="_blank"&gt;Roberto
Bez&lt;/a&gt; gestolpert. Roberto stellt in seinem Blog Post die verschiedenen Varianten
kompakt gegenüber. Die Lektüre des Artikels kann ich jedem Ajax interessierten
Webforms Entwickler wärmstens empfehlen.
&lt;/p&gt;
        &lt;p&gt;
Weiter hat &lt;a title="Blog von René Drescher-Hackel" href="http://weblog.drescher-hackel.de" target="_blank"&gt;René
Drescher-Hackel&lt;/a&gt; in einem Kommentar zu meinem letzen Beitrag, dass mit &lt;a href="http://www.ajaxpro.info/" target="_blank"&gt;Ajax.NET
Professional (AJAX.PRO)&lt;/a&gt; eine weitere effiziente Alternative zur Verfügung
steht. Ich muss gestehen, dass mir die Existenz dieses Frameworks bis jetzt vollkommen
entgangen ist. Gelobe allerdings Besserung und werde es mir gerne ansehen und mein
Beispiel damit umsetzen.
&lt;/p&gt;
        &lt;img width="0" height="0" src="http://blog.codemurai.de/aggbug.ashx?id=6d714381-7ea3-45cb-a24f-53ea984974d6" alt="" /&gt;
        &lt;br /&gt;
        &lt;hr /&gt;
        &lt;a href="http://blog.codemurai.de"&gt;blog.codemurai.de&lt;/a&gt; © André Krämer |&lt;a href="http://www.codemurai.de/pages/de/impress.aspx"&gt;Impressum &lt;/a&gt;| &lt;a href="http://feeds2.feedburner.com/codemurai/qlrN"&gt;Abonieren &lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/codemurai/qlrN?a=AQFgiChcyw8:OinSnhyd-0g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/codemurai/qlrN?d=yIl2AUoC8zA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/codemurai/qlrN?a=AQFgiChcyw8:OinSnhyd-0g:xZ3Pn_mapoI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/codemurai/qlrN?d=xZ3Pn_mapoI" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/codemurai/qlrN?a=AQFgiChcyw8:OinSnhyd-0g:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/codemurai/qlrN?d=I9og5sOYxJI" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codemurai/qlrN/~4/AQFgiChcyw8" height="1" width="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/codemurai/qlrN/~3/AQFgiChcyw8/ASPNETWebformsAnwendungenUndAjaxTeil6KleineTippsDieDasLebenLeichterMachen.aspx</link>
      <author>Andre Kraemer</author>
      <dc:creator>Andre</dc:creator>
      <comments>http://blog.codemurai.de/CommentView,guid,6d714381-7ea3-45cb-a24f-53ea984974d6.aspx</comments>
      <guid isPermaLink="False">http://blog.codemurai.de/PermaLink,guid,6d714381-7ea3-45cb-a24f-53ea984974d6.aspx</guid>
      <pubDate>Thu, 11 Mar 2010 21:44:25 GMT</pubDate>
    </item>
    <item>
      <title>Vorsicht mit Visible = false</title>
      <description>&lt;p&gt;
Eigentlich altbekannt, trotzdem bin ich gerade mal wieder darauf hereingefallen und
schreibe des deshalb hier auf:
&lt;/p&gt;
        &lt;p&gt;
Ich wollte in einer ASP.NET Webforms Anwendung ein Servercontrol serverseitig über 
&lt;/p&gt;
        &lt;p&gt;
        &lt;/p&gt;
        &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:714a717f-e6ba-4ed9-9248-e32dce897ab0" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
          &lt;pre class="c#"&gt;meinControl.Visible = false;&lt;/pre&gt;
        &lt;/div&gt;
        &lt;p&gt;
ausblenden, um es nach einer Nutzeraktion auf dem Client wieder einzublenden:
&lt;/p&gt;
        &lt;p&gt;
        &lt;/p&gt;
        &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:be23a1a1-8783-4a3b-880b-45a8e951a7f1" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
          &lt;pre class="js"&gt;$(Id$=&amp;quot;MeinControl&amp;quot;).show();&lt;/pre&gt;
        &lt;/div&gt;
        &lt;p&gt;
Leider funktioniert das allerdings nicht, da ein serverseitiges Visible = false dafür
sorgte, dass das Control erst garnicht gerendert wurde und somit auf dem Client nicht
verfügbar war.
&lt;/p&gt;
        &lt;p&gt;
Die simple Lösung im Codebehind:
&lt;/p&gt;
        &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f1cf8f3e-c820-450e-a132-3e68285fbc55" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;
          &lt;pre class="c#"&gt;meinControl.Style.Add(HtmlTextWriterStyle.Display, &amp;quot;none&amp;quot;);&lt;/pre&gt;
        &lt;/div&gt;
        &lt;p&gt;
Dann klappts auch mit dem Einblenden ;-)
&lt;/p&gt;
        &lt;p&gt;
          &lt;em&gt;War dieser Beitrag hilfreich? Dann kick ihn doch bitte.&lt;/em&gt;
        &lt;/p&gt;
        &lt;img width="0" height="0" src="http://blog.codemurai.de/aggbug.ashx?id=91af6697-e6e7-4765-8e24-1bf02130e039" alt="" /&gt;
        &lt;br /&gt;
        &lt;hr /&gt;
        &lt;a href="http://blog.codemurai.de"&gt;blog.codemurai.de&lt;/a&gt; © André Krämer |&lt;a href="http://www.codemurai.de/pages/de/impress.aspx"&gt;Impressum &lt;/a&gt;| &lt;a href="http://feeds2.feedburner.com/codemurai/qlrN"&gt;Abonieren &lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/codemurai/qlrN?a=NIkK0O-UDf4:mIRdCv60y2Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/codemurai/qlrN?d=yIl2AUoC8zA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/codemurai/qlrN?a=NIkK0O-UDf4:mIRdCv60y2Q:xZ3Pn_mapoI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/codemurai/qlrN?d=xZ3Pn_mapoI" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/codemurai/qlrN?a=NIkK0O-UDf4:mIRdCv60y2Q:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/codemurai/qlrN?d=I9og5sOYxJI" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codemurai/qlrN/~4/NIkK0O-UDf4" height="1" width="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/codemurai/qlrN/~3/NIkK0O-UDf4/VorsichtMitVisibleFalse.aspx</link>
      <author>Andre Kraemer</author>
      <dc:creator>Andre</dc:creator>
      <comments>http://blog.codemurai.de/CommentView,guid,91af6697-e6e7-4765-8e24-1bf02130e039.aspx</comments>
      <guid isPermaLink="False">http://blog.codemurai.de/PermaLink,guid,91af6697-e6e7-4765-8e24-1bf02130e039.aspx</guid>
      <pubDate>Thu, 11 Mar 2010 19:41:16 GMT</pubDate>
    </item>
    <item>
      <title>ASP.NET MVC 2 RTM – für .NET Framework 3.5 SP 1 / Visual Studio 2008</title>
      <description>&lt;p&gt;ASP.NET MVC 2 für das .NET Framework 3.5 SP1 / Visual Studio 2008&amp;nbsp; ist seit gestern RTM und steht &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c9ba1fe1-3ba8-439a-9e21-def90a8615a9"&gt;hier&lt;/a&gt; zum Download bereit.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blog.alexonasp.net/image.axd?picture=WindowsLiveWriter/ASP.NETMVC2RTMfr.NE.5SP1VisualStudio2008/60F25A2D/dotnet.png" style="border:0px none;display:inline;" title="dotnet" alt="dotnet" border="0" height="100" width="347" /&gt;&lt;/p&gt;</description>
      <link>http://blog.alexonasp.net/post/2010/03/11/ASPNET-MVC-2-RTM-e28093-fur-NET-Framework-35-SP-1-Visual-Studio-2008.aspx</link>
      <author>Alexander Zeitler</author>
      <dc:creator>Alexander Zeitler</dc:creator>
      <comments>http://blog.alexonasp.net/post/2010/03/11/ASPNET-MVC-2-RTM-e28093-fur-NET-Framework-35-SP-1-Visual-Studio-2008.aspx#comment</comments>
      <guid isPermaLink="False">http://blog.alexonasp.net/post.aspx?id=5e794aac-0570-4787-a429-248dcafa2b7a</guid>
      <pubDate>Thu, 11 Mar 2010 16:06:00 GMT</pubDate>
    </item>
    <item>
      <title>Intel-Netbook-App-Contest geht in die nächste Runde</title>
      <description>Anfang März erst hatte ich über den 1-Million-Dollar-Fonds berichtet, den Intel im Laufe dieses Jahres in die Entwicklung von mobilen Anwendungen stecken will. Die ersten zwei Sub-Wettbewerbe starteten am 1. März und enden am 31. März. Der dritte Teil ist mittlerweile auch bekannt und nennt sich wieder Intel Atom Developer Challenge. Dieser hoch dotierte Wettbewerb läuft bis [...]</description>
      <link>http://www.software-dev-blog.de/intel-netbook-app-contest-geht-in-die-nachste-runde/03/2010/</link>
      <author>Michael Hülskötter</author>
      <dc:creator>Michael Hülskötter</dc:creator>
      <comments>http://www.software-dev-blog.de/intel-netbook-app-contest-geht-in-die-nachste-runde/03/2010/#comments</comments>
      <guid isPermaLink="False">http://www.software-dev-blog.de/?p=1331</guid>
      <pubDate>Thu, 11 Mar 2010 15:13:16 GMT</pubDate>
    </item>
  </channel>
</rss>