<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.aspnetzone.de/utility/FeedStylesheets/rss.xsl" media="screen"?><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>Search results matching tag 'Control'</title><link>http://www.aspnetzone.de/search/SearchResults.aspx?o=DateDescending&amp;tag=Control&amp;orTags=0</link><description>Search results matching tag 'Control'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>richtextbox in ASP.NET? </title><link>http://www.aspnetzone.de/forums/post/224218.aspx</link><pubDate>Wed, 02 May 2012 12:44:03 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:224218</guid><dc:creator>omega90</dc:creator><description>&lt;p&gt;Hallo&lt;/p&gt;&lt;p&gt;ich bin gerade dabei eine Signatur erzeugen zu lassen, die Informationen von der Person werden aus dem Active Directory gezogen. Dazu habe ich eine rtf Datei erstellt die aus folgendem Inhalt entstand ...&lt;/p&gt;&lt;p&gt;


&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:'Arial','sans-serif';color:#1F497D;mso-fareast-language:DE;"&gt;Mit freundlichen Grüßen&lt;br&gt;
Best regards&lt;/span&gt;&lt;span style="color:#1F497D;mso-fareast-language:DE;"&gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:'Arial','sans-serif';color:#1F497D;mso-fareast-language:DE;"&gt;i.A. &amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt;&lt;br&gt;
&amp;lt;Abteilung&amp;gt;&lt;/span&gt;&lt;span style="color:#1F497D;mso-fareast-language:DE;"&gt;&lt;br&gt;
&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:10.0pt;font-family:'Arial','sans-serif';color:#1F497D;mso-fareast-language:DE;"&gt;&amp;lt;Firma&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#1F497D;mso-fareast-language:DE;"&gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:'Arial','sans-serif';color:#1F497D;mso-fareast-language:DE;"&gt;&amp;lt;Strasse&amp;gt; &lt;/span&gt;&lt;span style="color:#1F497D;mso-fareast-language:DE;"&gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:'Arial','sans-serif';color:#1F497D;mso-fareast-language:DE;"&gt;&amp;lt;Ort&amp;gt;&lt;/span&gt;&lt;span style="color:#1F497D;mso-fareast-language:DE;"&gt;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:'Arial','sans-serif';color:#1F497D;mso-fareast-language:DE;"&gt;phone: &amp;lt;Telefon&amp;gt;&lt;br&gt;
fax: &amp;lt;Fax&amp;gt;&lt;br&gt;
email: &amp;lt;eMail&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:'Arial','sans-serif';color:#1F497D;mso-fareast-language:DE;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;Nun dachte ich mir ich erstelle in meiner Webform eine Richtextbox in der der Text zu letzt angezeigt wird und die Werte die zur Person gehören eingefügt werden.&lt;/p&gt;&lt;p&gt;Das Problem ist das ich keine Richtextbox &amp;nbsp;in der Toolbox finde :(&amp;nbsp;&lt;/p&gt;&lt;p&gt;Gibt es auch eine andere Möglichkeit die Signatur aufzubauen ...aus einer rtf datei heraus&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;gruß w.t&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;</description></item><item><title>jQuery Plugin selbstgemacht - Dynamisches laden von ASP.NET Controls</title><link>http://www.aspnetzone.de/blogs/robertobez/archive/2009/09/02/jquery-plugin-dynamisches-laden-von-asp-net-controls.aspx</link><pubDate>Wed, 02 Sep 2009 21:25:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:212717</guid><dc:creator>Roberto</dc:creator><description>Wer kennt sie nicht... die zauberhaften ajax Kekse.&lt;br&gt;&lt;br&gt;Doch was steckt dahinter?&lt;br&gt;&lt;br&gt;In diesem Beitrag werde ich anhand eines Beispiels erklären, wie man ein &lt;a target="_blank" href="http://plugins.jquery.com/"&gt;jQuery Plugin&lt;/a&gt; dafür erstellen kann.&lt;br&gt;&lt;br&gt;Die Vorgehensweiße:&lt;br&gt;Über
einen clientseitigen Funktionsaufruf werden wir den Inhalt eines HTML
Containers mit dem eines klassischen ASP.NET Controls ersetzen.&lt;br&gt;Das alles passiert mit einem &lt;a target="_blank" href="http://aspnetzone.de/blogs/robertobez/archive/2009/08/31/komplexe-objekte-per-json-serialisierung-von-jquery-zu-aspnet-webservice.aspx"&gt;Webservice Aufruf per jQuery&lt;/a&gt; der den HTML Code zurückliefert.&lt;br&gt;&lt;br&gt;&lt;b&gt;Schritt 1: Das Plugin&lt;br&gt;&lt;/b&gt;&lt;br&gt;Eine kurze Einführung in jQuery Plugins.&lt;br&gt;In jQuery werden Objekte mit $.fn.&amp;lt;Name&amp;gt; = function() {} erweitert.&lt;br&gt;Allerdings sollte der "$" Alias vermieden werden, da Konflikte mit anderen Javascript Bibliotheken(bspw. &lt;a target="_blank" href="http://prototypejs.org/"&gt;prototype.js&lt;/a&gt;) entstehen können. &lt;br&gt;Die am häufigsten benutzte Vorgehensweise sieht so aus:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;function&lt;/span&gt;($){&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// --- Plugin kommt hier&lt;/span&gt;&lt;br /&gt;})(jQuery);&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Das neue Plugin nennt sich ascxLoder. Als Parameter die Pfadangabe und eine Sammlung mit Einstellungen.&lt;br&gt;Natürlich werden auch Standard Werte benötigt, damit ewige Parameter Übergaben vermieden werden.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;$.fn.ascxLoader &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;function&lt;/span&gt;( path, params ) {&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;var&lt;/span&gt; defaults &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; {&lt;br /&gt;        showLoadingScreen &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; true&lt;br /&gt;    };&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;var&lt;/span&gt; config &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; $.extend(defaults, params);&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// --- Mit $(this) können wir auf den Container zugreifen.&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// --- über config.&amp;lt;Value&amp;gt; die gewünschte Einstellung.&lt;/span&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Der Aufruf erfolgt dann über:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;$(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"#MyContainer"&lt;/span&gt;).ascxLoader(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"~/Control.ascx"&lt;/span&gt;, { showLoadingScreen: false });&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Schritt 2: Der Webservice Aufruf&lt;/b&gt;&lt;br&gt;&lt;br&gt;Damit das Plugin jetzt auch den gewünschten Effekt bringt, bauen wir einen einfachen &lt;a target="_blank" href="http://aspnetzone.de/blogs/robertobez/archive/2009/08/31/komplexe-objekte-per-json-serialisierung-von-jquery-zu-aspnet-webservice.aspx"&gt;Webservice Request&lt;/a&gt; ein.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;function&lt;/span&gt;($){&lt;br /&gt;$.fn.ascxLoader &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;function&lt;/span&gt;( path, params ) {&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;var&lt;/span&gt; defaults &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; {&lt;br /&gt;        path: &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Control.ascx"&lt;/span&gt;,&lt;br /&gt;        showLoadingScreen: true&lt;br /&gt;    };    &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;var&lt;/span&gt; config &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; $.extend(defaults, params);&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;var&lt;/span&gt; obj &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; $(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;);&lt;br /&gt;    path &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; path || config.path;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// --- der Webservice Aufruf mit Pfad übergabe:&lt;/span&gt;&lt;br /&gt;    $.ajax({&lt;br /&gt;        type        : &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"POST"&lt;/span&gt;,&lt;br /&gt;        url         : &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Webservices.asmx/GetControl"&lt;/span&gt;,&lt;br /&gt;        data        : '{&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Path"&lt;/span&gt;:&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"' + path + '"&lt;/span&gt;}',&lt;br /&gt;        contentType : &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"application/json; charset=utf-8"&lt;/span&gt;,&lt;br /&gt;        dataType    : &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"json"&lt;/span&gt;,&lt;br /&gt;        success     : &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;function&lt;/span&gt;( result ) {&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// result.d enthält den HTML code für unseren Container&lt;/span&gt;&lt;br /&gt;            obj.html( result.d );&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;}&lt;br /&gt;})(jQuery);&lt;/span&gt;&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
&lt;i&gt;Hinweis&lt;/i&gt;: "path = path || config.path" bedeutet: falls path undefined ist, nimm config.path&lt;br&gt;&lt;br&gt;&lt;b&gt;Schritt 3: Der Webservice&lt;/b&gt;&lt;br&gt;&lt;br&gt;Nun zum Webservice, der uns das gewünschte Control als HTML code zurückgibt.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;WebMethod()&amp;gt; _&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Function&lt;/span&gt; GetControl( Path &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;As&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;String&lt;/span&gt; ) &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;As&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Dim&lt;/span&gt; page        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;As&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;New&lt;/span&gt; Page()&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Dim&lt;/span&gt; userControl &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;As&lt;/span&gt; UserControl &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Page.LoadControl( Path )&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Dim&lt;/span&gt; output      &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;As&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;New&lt;/span&gt; System.IO.StringWriter()&lt;br /&gt;    page.Controls.&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Add&lt;/span&gt;( userControl )&lt;br /&gt;    HttpContext.Current.Server.Execute( page, output, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;false&lt;/span&gt; )       &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; output.ToString()&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;End&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Function&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Über folgenden Funktionsaufruf lässt sich das Control neu laden.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;   $(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Container"&lt;/span&gt;).ascxLoader(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"~/Controls/Control.ascx"&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;
War doch gar nicht so schwierig oder?&lt;br&gt;
&lt;br&gt;Anbei gibt es ein Beispiel zum selber ausprobieren.&lt;br&gt;
Dieses beinhaltet neben dem eben gezeigten Beispiel auch die
Möglichkeit, einer Anforderungen Parameter mitzugeben und so je nach
Aufruf ein geändertes Control zurückzugeben.&lt;br&gt;&lt;br&gt;
&lt;div class="HinweisBox"&gt;
&lt;b&gt;Update:&lt;/b&gt;&lt;br&gt;Eine gelungene und erweiterte Version des Plugins, von &lt;a target="_blank" href="http://www.zerbit.de"&gt;Kristof Zerbe&lt;/a&gt; findet sich &lt;a target="_blank" href="http://www.zerbit.de/artikel/usercontrol_dynamisch_laden_update_und_jquery_plugin.aspx"&gt;hier&lt;/a&gt;!&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Events f&amp;#252;r User- und CustomControls definieren und benutzen</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2008/06/12/events-f-r-user-und-customcontrols-definieren-und-benutzen.aspx</link><pubDate>Thu, 12 Jun 2008 19:44:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:197542</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;In der Welt von ASP.NET gibt es - im Gegensatz zu Classic ASP - ein Eventsystem das in der ASP.NET Engine verwurzelt ist. &lt;BR&gt;Dazugehörend haben viele ASP.NET Controls Events. Das bekannteste ist wohl &lt;EM&gt;Button.Click&lt;/EM&gt;, über diesen Event kann festgestellt werden ob ein bestimmter Button gedrückt wurde, oder nicht.&lt;/P&gt;
&lt;P&gt;Nun gibt es ja die Möglichkeit eigene User- und CustomControls zu schreiben. &lt;BR&gt;Diese können mit Events ausgestattet werden, und genau um das geht es hier in diesem Artikel.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Wie funktionieren die Events in ASP.NET?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Grundsätzlich ereignen sich alle Aktionen auf dem Client, bspw. klickt eine Person an einem Computer in dessen Webbrowser auf einen Button. &lt;BR&gt;Danach wird das Formular abgesendet und der Server empfängt dieses.&lt;/P&gt;
&lt;P&gt;Der Server leitet den Http-Request (Die Http-Anfrage) an die ASP.NET Engine weiter. &lt;BR&gt;Die Engine findet dann anhand der &lt;EM&gt;&amp;lt;Control&amp;gt;.UniqueID&lt;/EM&gt; (Siehe: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2007/04/09/artikel-identifizierung-von-controls-control-id-clientid-uniqueid.aspx"&gt;Identifizierung von Controls: Control.ID / .ClientID / .UniqueID&lt;/A&gt;) das Control zu dem die jeweiligen Daten gehören.&lt;/P&gt;
&lt;P&gt;Wenn dieses Control gefunden wurde, leitet die Engine die gesamten POST-Daten (Formulardaten) an das bestreffende Control weiter. &lt;BR&gt;Sind die Daten geändert worden, bzw. befinden sich die Daten in einem erwarteten Zustand, löst das Control den Event aus, ansonsten nicht.&lt;/P&gt;
&lt;P&gt;Dies ist die normale Vorgehensweise von Events (Die Page Events laufen ähnlich ab), die über POST (Formular, Postback) ausgelöst werden.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Wie definiere ich einen Event, oder was ist ein Event überhaupt?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Für die Grundlagen zur Event-Erstellung, mit oder ohne nutzerspezifische Argumente, verweise ich hier auf den FAQ Thread des C#-Forums myCSHarp.de.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.mycsharp.de/wbb2/thread.php?threadid=26116" target=_blank&gt;Eigenen Event definieren / Information zu Events (Externer Link: myCSharp.de)&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Die &lt;A href="http://www.mycsharp.de/wbb2/board.php?boardid=70"&gt;FAQ&lt;/A&gt; von myCSharp.de als solches ist auch für andere Sprachspezifische Angelegenheit sehr zu empfehlen.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Wie / Wann werden die Events ausgelöst und gibt es mehrere Auslösearten?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Das trickreiche an Events in ASP.NET ist nicht die Dekleration der Events, sondern der Zeitpunkt an dem sie ausgelöst werden sollen. &lt;BR&gt;Es gibt tatsächlich mehrere Arten von Zustandsveränderungen bei denen ein Event ausgelöst werden kann.&lt;/P&gt;
&lt;P&gt;Folgend die Möglichkeiten von Zustandsänderungen durch einen Benutzer der Web Applikation ausgelöst:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Werte die durch einen (oder mehrere) &lt;STRONG&gt;GET-Parameter&lt;/STRONG&gt; (QueryString) empfangen werden, bspw. wenn der Benutzer auf einen Link klickt 
&lt;LI&gt;Werte die durch einen (oder mehrere) &lt;STRONG&gt;POST-Parameter&lt;/STRONG&gt; (Form) empfangen werden, bspw. wenn der Benutzer Formularfelder ausgefüllt hat und dann auf einen Button klickt, oder aber nur auf einen Button klickt &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Zudem gibt es noch weitere Faktoren und Möglichkeiten, die als Indikatoren für eine Eventauslösung benutzt werden können:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Werte die durch einen (oder mehrere) POST-Parameter empfangen werden, die durch die &lt;STRONG&gt;&lt;A href="http://aspalliance.com/895"&gt;__doPostback-Javascriptfunktion&lt;/A&gt; abgeschickt werden&lt;/STRONG&gt; 
&lt;LI&gt;Zustandsänderungen aller Art auf der Serverseite (Datei, Datenbank, Session, Zeit, Datum, etc... 
&lt;LI&gt;Festgelegte Logik im Code, bspw. Vergleiche, etc... &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Aller Anfang ist &lt;STRIKE&gt;schwer&lt;/STRIKE&gt; leicht&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Zuerst folgt ein Beispiel das auf einen GET-Parameter reagiert und bei Vorhandensein des Parameters einen Event auslöst.&lt;/P&gt;
&lt;P&gt;C#:&lt;/P&gt;
&lt;DIV class=CodeBox&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;namespace&lt;/span&gt; pb.Web.UI.WebControls.Examples &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; TestControlGetSimple : WebControl  &lt;br /&gt;    { &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;event&lt;/span&gt; EventHandler ParameterAvailable; &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;virtual&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnParameterAvailable(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.ParameterAvailable !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;) &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.ParameterAvailable(sender, e); &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; HtmlTextWriterTag TagKey { &lt;br /&gt;            get { &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; HtmlTextWriterTag.Div; &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnInit(EventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;.OnInit(e); &lt;br /&gt;&lt;br /&gt;            HyperLink link &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; HyperLink(); &lt;br /&gt;            link.ID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"hlTest"&lt;/span&gt;; &lt;br /&gt;            link.Text &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Testlink"&lt;/span&gt;; &lt;br /&gt;            link.NavigateUrl &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"?test=1234"&lt;/span&gt;; &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(link); &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnLoad(EventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;.OnLoad(e); &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; name &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Context.Request.QueryString[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"test"&lt;/span&gt;]; &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(!&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt;.IsNullOrEmpty(name)) { &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.OnParameterAvailable(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;, EventArgs.Empty); &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;    } &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt; &lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Was genau passiert da jetzt?&lt;/P&gt;
&lt;P&gt;Das Beispiel ist einfach aufgebaut. Zuerst wird ein Event mit einem Standard-Eventhandler (in .NET verfügbar) implementiert. &lt;BR&gt;Danach wird die eventauslösende On&lt;EM&gt;Event&lt;/EM&gt;-Methode definiert, die aufgerufen wird, wenn der Event ausgelöst werden soll.&lt;/P&gt;
&lt;P&gt;Anschliessend wird per überschriebenen &lt;A href="http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.webcontrol.tagkey.aspx"&gt;TagKey-Eigenschaft&lt;/A&gt; angegeben, dass das Control ein umschliessenden Div-Tag besitzen soll. (Im Beispielprojekt wird das für die Formatierung benutzt). &lt;BR&gt;In der OnInit-Methode wird ein Objekt vom Typ Hyperlink angelegt, ein Text und eine Url + GET-Parameter angegeben und anschliessend zum Control hinzugefügt.&lt;/P&gt;
&lt;P&gt;Jetzt kommt der spannende Teil: Das Event wird ausgelöst.&lt;/P&gt;
&lt;P&gt;Beim Laden des Controls wird ein evt. vorhandener Parameter über &amp;lt;HttpContext&amp;gt;.Request.QueryString(&amp;lt;Key&amp;gt;) abgerufen, und anschliessend überprüft ob dieser &lt;EM&gt;null&lt;/EM&gt; oder ein &lt;EM&gt;Leerstring&lt;/EM&gt; (String.Empty) ist.&lt;/P&gt;
&lt;P&gt;Falls dies nicht der Fall ist, wird der Event ausgelöst. Das war schon der ganze "Zauber" auf der Control-Seite.&lt;/P&gt;
&lt;P&gt;Die Benutzung des Controls in einer ASP.NET Seite ist sehr einfach und geht so von der Hand, wie ansonsten ein Klick-Event eines Buttons abonniert wird.&lt;/P&gt;
&lt;P&gt;Wie das Control registiert wird, um auf der Seite zu benutzen, kann im folgendenen Blogpost nachgelesen werden:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2007/09/27/usercontrol-und-customcontrols-per-web-config-verfuegbar-machen.aspx"&gt;UserControl und CustomControls per web.config verfuegbar machen&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Beispiel:&lt;/P&gt;
&lt;P&gt;ASPX: &lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;BR&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;fieldset&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;legend&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;GET Beispiel (simple)&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;legend&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;pb:TestControlGetSimple&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;ID&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="testGetSimple"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;runat&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="server"&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;br&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;asp:Label&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;ID&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="lblInfoGetSimple"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Text&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="Parameter nicht verfügbar"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;runat&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="server"&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;fieldset&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/code&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Codebehind (C#): &lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e) { &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.testGetSimple.ParameterAvailable += testGetSimple_ParameterAvailable; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; testGetSimple_ParameterAvailable(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e) { &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.lblInfoGetSimple.Text &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Parameter ist &amp;lt;strong&amp;gt;vorhanden&amp;lt;/strong&amp;gt;"&lt;/span&gt;; &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Zuerst werden auf der ASP.NET Seite das Test-Control und ein Label hinzugefügt. &lt;BR&gt;Anschliessend abonnieren wir das Event im Page_Load Eventhandler und fügen dem zugewiesenen Handler Code hinzu, damit das Label anzeigt, ob der Event ausgelöst wurde oder nicht.&lt;/P&gt;
&lt;P&gt;Wenn der Link angeklickt wird und infolgedessen ein GET-Parameter vorhanden ist, wird das Event ausgelöst und im Eventhandler den Text des Labels geändert. &lt;BR&gt;Aus Benutzersicht ist nur der geänderte Text sichtbar.&lt;/P&gt;
&lt;P&gt;Das Beispiel wurde mit Absicht sehr simpel gehalten, um einen einfach Einstieg zu ermöglichen.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Ein erweitertes Beispiel mit GET-Parametern&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Folgend der Code eines erweiterten Beispiels, das mithilfe einer Session erkennen kann, ob der aktuelle Wert des GET-Parametes geändert wurde. Den ASPX-Teil wird nicht mehr gezeigt, da er praktisch identisch zum Beispiel (Siehe Code) ist.&lt;/P&gt;
&lt;P&gt;C#: &lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;namespace&lt;/span&gt; pb.Web.UI.WebControls.Examples &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; TestControlGet : WebControl, INamingContainer &lt;br /&gt;    { &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;delegate&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; NameChangedDelegate(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, NameChangedEventArgs e); &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;event&lt;/span&gt; NameChangedDelegate NameChanged; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;virtual&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnNameChanged(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, NameChangedEventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.NameChanged !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;) &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.NameChanged(sender, e); &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; HtmlTextWriterTag TagKey { &lt;br /&gt;            get { &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; HtmlTextWriterTag.Div; &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnInit(EventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;.OnInit(e); &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;for&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; i &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 0; i &amp;lt; 5; i++) { &lt;br /&gt;                HyperLink link &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; HyperLink(); &lt;br /&gt;                link.ID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"testLink"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; i.ToString(); &lt;br /&gt;                link.Text &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Patrick "&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; i.ToString(); &lt;br /&gt;                link.NavigateUrl &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"?name=Patrick"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; i.ToString(); &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(link); &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; LiteralControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;)); &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnLoad(EventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;.OnLoad(e); &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; name &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Context.Request.QueryString[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"name"&lt;/span&gt;]; &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; nameBefore; &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sessionValue &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Context.Session[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"name"&lt;/span&gt;]; &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (sessionValue !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;) &lt;br /&gt;                nameBefore &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; sessionValue.ToString(); &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;bool&lt;/span&gt; flag &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;false&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// Erste Änderung (ohne Session, erster Aufruf) &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (name !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; sessionValue == &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;) &lt;br /&gt;                flag &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;true&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// Änderung mithilfe der Session herausfinden &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (sessionValue !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; name !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !sessionValue.Equals(name)) &lt;br /&gt;                flag &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;true&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(flag) &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.OnNameChanged(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; NameChangedEventArgs(name)); &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Context.Session[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"name"&lt;/span&gt;] &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; name; &lt;br /&gt;        } &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; NameChangedEventArgs : EventArgs { &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; _newName; &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; NameChangedEventArgs(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; newName) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._newName &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; newName; &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; NewName { &lt;br /&gt;            get { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._newName; } &lt;br /&gt;        } &lt;br /&gt;    } &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt; &lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;In diesem Beispiel wird eine Liste von Links mit GET-Parametern ausgegeben. &lt;BR&gt;Wenn der empfangene Parameter ändert, wird der Event ausgelöst.&lt;/P&gt;
&lt;P&gt;Beim ersten Empfangen eines Wertes wird dieser in die Session geschrieben und dieser Spezialfall berücksichtigt. &lt;BR&gt;Wird jedoch ein Wert empfangen, wenn die Session schon ein Wert enthält, wird auf Ungleichheit geprüft, falls wahr wird der Event ausgelöst.&lt;/P&gt;
&lt;P&gt;Zudem wird in diesem Beispiel ein eigener Delegate benutzt, um eigene EventArgs zu unterstützen. &lt;BR&gt;Im Eventhandler kann der geänderte Namen einfach über &lt;STRONG&gt;e.NewName&lt;/STRONG&gt; abgerufen werden.&lt;/P&gt;
&lt;P&gt;(Der Einfachheit halber habe ich keinen generischen EventHandler benutzt, obwohl dieser ab .NET 2.0 natürlich zu empfehlen wäre. Wie es geht, siehe: &lt;A href="http://www.mycsharp.de/wbb2/thread.php?threadid=26116" target=_blank&gt;Eigenen Event definieren / Information zu Events (Externer Link: myCSharp.de)&lt;/A&gt; )&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Einen Event über POST-Werte mithilfe von &lt;A href="http://msdn.microsoft.com/de-de/library/system.web.ui.ipostbackeventhandler.aspx"&gt;IPostBackEventHandler&lt;/A&gt; und &lt;A href="http://msdn.microsoft.com/de-de/library/system.web.ui.clientscriptmanager.getpostbackeventreference.aspx"&gt;ClientScript.GetPostBackEventReference&lt;/A&gt; auslösen&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Wie weiter oben schon angesprochen, stellt ASP.NET selber eine Architektur bereit, um mit POST-Daten Events über eine spezielle Infrastruktur auszulösen. &lt;BR&gt;Die jetzt vorgestellte Lösung basiert auf der &lt;A href="http://aspalliance.com/895"&gt;__doPostBack-Funktion&lt;/A&gt;, die ASP.NET im Normalfall in jeder ASP.NET Seite zur Verfügung stellt.&lt;/P&gt;
&lt;P&gt;Folgend die Definition der Schnittstelle.&lt;/P&gt;
&lt;P&gt;C#: &lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;interface&lt;/span&gt; IPostBackEventHandler &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; RaisePostBackEvent(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; eventArgument); &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Im Normalfall geschieht ein Postback über einen Html-Button, der das Formular absendet. &lt;BR&gt;Das Formular kann aber auch per Javascript abgesendet werden, genau das nutzt die __doPostBack-Funktion. &lt;BR&gt;Sie kann zusätzlich Parameter entgegennehmen und diese über HiddenFields (Versteckte Eingabefelder) zum Server schicken.&lt;/P&gt;
&lt;P&gt;So ist nicht nur ein Abschicken und Prüfen von Form-Elementen möglich, sondern auch das übergeben beliebiger Elemente und zudem auch den Namen des Controls, von dem die Elemente bzw. Argumente kommen.&lt;/P&gt;
&lt;P&gt;Über die Methode &lt;EM&gt;GetPostBackEventReference()&lt;/EM&gt; der Klasse &lt;EM&gt;ClientScript&lt;/EM&gt; finden sich viele Überladungen, die benutzt werden können um eine Javascript Postback-Referenz zu bekommen. &lt;BR&gt;Dies ist nichts weiter als ein benutzerdefinierter Aufruf der __doPostBack-Funktion, mit eigenen Parametern.&lt;/P&gt;
&lt;P&gt;ASP.NET stellt eine Schnittstelle Namens &lt;EM&gt;IPostBackEventHandler&lt;/EM&gt; zur Verfügung, die implementiert werden kann, um über Postbacks mit der Möglichkeit der Übergabe von Elementen zu kommunizieren. &lt;BR&gt;Dabei muss immer das Control selber (schlussendlich die &lt;EM&gt;UniqueID&lt;/EM&gt; des Controls) übergeben werden, sowie Argumente nach Wunsch.&lt;/P&gt;
&lt;P&gt;Vielleicht kennt der eine oder andere die __doostBack-Funktion aus dem GridView, wenn eine Zeile selektiert wird. &lt;BR&gt;Dies wird genau nach diesem Schema erledigt.&lt;/P&gt;
&lt;P&gt;Folgend nun das Beispiel (Wiederum nur das Control an sich, da der Rest praktisch gleich ist):&lt;/P&gt;
&lt;P&gt;C#: &lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;namespace&lt;/span&gt; pb.Web.UI.WebControls.Examples &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; TestControlPost : WebControl, INamingContainer, IPostBackEventHandler &lt;br /&gt;    { &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;delegate&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; NameSelectedDelegate(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, NameSelectedEventArgs e); &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;event&lt;/span&gt; NameSelectedDelegate NameSelected; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;virtual&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnNameChanged(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, NameSelectedEventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.NameSelected !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;) &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.NameSelected(sender, e); &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; HtmlTextWriterTag TagKey { &lt;br /&gt;            get { &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; HtmlTextWriterTag.Div; &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnInit(EventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;.OnInit(e); &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;for&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; i &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 0; i &amp;lt; 5; i++) { &lt;br /&gt;                HyperLink link &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; HyperLink(); &lt;br /&gt;                link.ID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"testLink"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; i.ToString(); &lt;br /&gt;                link.Text &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Patrick"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; i.ToString(); &lt;br /&gt;                link.NavigateUrl &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"#"&lt;/span&gt;; &lt;br /&gt;                link.Attributes.Add(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"onclick"&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Page.ClientScript.GetPostBackEventReference(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;, &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Patrick "&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; i.ToString())); &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(link); &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; LiteralControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;)); &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;#region&lt;/span&gt; IPostBackEventHandler Members &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; RaisePostBackEvent(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; eventArgument) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.NameSelected !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;) &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.NameSelected(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; NameSelectedEventArgs(eventArgument)); &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;#endregion&lt;/span&gt; &lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; NameSelectedEventArgs : EventArgs &lt;br /&gt;    { &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; _selectedName; &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; NameSelectedEventArgs(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; newName) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._selectedName &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; newName; &lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; SelectedName { &lt;br /&gt;            get { &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._selectedName; &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;    } &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Das Beispiel ist dem letzten Beispiel sehr ähnlich, jedoch geht es hier um das Selektieren eines Namens, nicht um die Änderung dessen.&lt;/P&gt;
&lt;P&gt;Es werden auch HyperLinks erzeugt, und in dessen clientseitigem onclick-Eventhandler jeweils die PostBackEvent-Referenz mithilfe obengenannter Methode ein parameterisierter Javascript-Aufruf für das jeweilige Link erzeugt. &lt;BR&gt;Dabei wird eine Referenz auf das Control selbst mitgegeben, damit ASP.NET das Control anhand der UniqueID identifizieren kann, und den Namen, der selektiert werden kann.&lt;/P&gt;
&lt;P&gt;Die ASP.NET Engine merkt beim Durchgehen aller Controls, dass dieses Control die IPostBackEventHandler Schnittstelle implementiert und feuert dann ggf. bei Bestehen eines Events dass durch das Link gesendet wurde, das Event.&lt;/P&gt;
&lt;P&gt;Dies geschieht dadurch, dass ASP.NET die Methode RaisePostBackEvent aufruft und ihr das Argument übergibt, dass vom Client gesendet wurde. &lt;BR&gt;Aufgrund dieser Infos kann schlussendlich im Eventhandler auf das Argument zugegriffen werden.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Das Interface &lt;A href="http://msdn.microsoft.com/de-de/library/system.web.ui.ipostbackdatahandler.aspx"&gt;IPostBackDataHandler&lt;/A&gt;, Sinn und Nutzen&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ASP.NET stellt noch ein weiteres Interface zur Verfügung, um Events auszulösen. &lt;BR&gt;Dieses setzt zwei Methoden voraus, folgend die Definition:&lt;/P&gt;
&lt;P&gt;C#: &lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;interface&lt;/span&gt; IPostBackDataHandler &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;bool&lt;/span&gt; LoadPostData(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; postDataKey, NameValueCollection postCollection); &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; RaisePostDataChangedEvent(); &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Im Beispiel auf der &lt;A href="http://msdn.microsoft.com/de-de/library/system.web.ui.ipostbackdatahandler.aspx"&gt;Seite&lt;/A&gt; von Microsoft, ist ein ziemlich sinnloses Beispiel zu finden, indem von einem WebControl ein Button nachgebaut wird.&lt;/P&gt;
&lt;P&gt;Diese Schnittstelle wird nur existieren, damit Microsoft alle Form-Controls implementieren konnte. &lt;BR&gt;In &lt;EM&gt;LoadPostData&lt;/EM&gt; werden die UniqueID des Controls selber und die komplette Post-Collection angeboten.&lt;/P&gt;
&lt;P&gt;Durch &lt;EM&gt;&amp;lt;Collection&amp;gt;[postDataKey]&lt;/EM&gt; kann der Wert des Controls sehr einfach gelesen werden, der Rückgabetyp ist ein &lt;EM&gt;bool&lt;/EM&gt; und bei einer Rückgabe von &lt;EM&gt;true&lt;/EM&gt; wird die &lt;EM&gt;RaisePostDataChangedEvent()-Methode&lt;/EM&gt; aufgerufen und der oder die Events können gefeuert werden. &lt;BR&gt;ASP.NET ruft - auch durch die Interface-Markierung - jeweils die Methode LoadPostData automatisch auf. &lt;BR&gt;Dies jedoch nur, wenn als &lt;EM&gt;TagKey&lt;/EM&gt; bzw &lt;EM&gt;TagName&lt;/EM&gt; des Controls ein bekanntes Form-Control gesetzt ist (Was auch Sinn macht). &lt;BR&gt;Wenn die Methode bei einem eigenen Control trotzdem aufgerufen werden soll, so muss die Methode &lt;A href="http://msdn.microsoft.com/de-de/library/system.web.ui.page.registerrequirespostback.aspx"&gt;RegisterRequiresPostBack&lt;/A&gt; (Siehe auch: &lt;A href="http://weblogs.asp.net/infinitiesloop/archive/2007/10/25/understanding-what-page-registerrequirespostback-does.aspx"&gt;Understanding what Page.RegisterRequiresPostBack does&lt;/A&gt;) von der Klasse &lt;A href="http://msdn.microsoft.com/de-de/library/system.web.ui.page.aspx"&gt;Page&lt;/A&gt; aufgerufen werden und das zu registrierende Control übergeben werden.&lt;/P&gt;
&lt;P&gt;Für eine Implementation der Controls: Button, DropDownList, TextBox, etc... ein sehr sinnvolles Interface. &lt;BR&gt;Bei der Implementation eines eigenen Controls, das kein Form-Tag darstellt geht es m.E. einfacher und besser ohne dieses Interface.&lt;/P&gt;
&lt;P&gt;Siehe auch:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title=http://www.dotnetjunkies.com/WebLog/srivallichavalidotnet/archive/2005/11/14/133754.aspx href="http://www.dotnetjunkies.com/WebLog/srivallichavalidotnet/archive/2005/11/14/133754.aspx"&gt;http://www.dotnetjunkies.com/WebLog/srivallichavalidotnet/archive/2005/11/14/133754.aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;An dieser Stelle gibt es kein Beispiel, jedoch ist im Download auch ein solches Beispiel vorhanden, dass das Interface benutzt.&lt;/P&gt;
&lt;P&gt;Inhalt des Downloads:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Alle hier darstellten Beispiele 
&lt;LI&gt;IPostBackDataHandler-Beispiel 
&lt;LI&gt;Alles in einer Solution mit einem Control-Library Projekt und einem Web Application Project zum Testen &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Download:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.aspnetzone.de/files/folders/197538/download.aspx"&gt;Control Events Sample&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Dank geht an&lt;/STRONG&gt;: &lt;BR&gt;&lt;A href="http://blog.norberteder.com/"&gt;Norbert Eder&lt;/A&gt; für das Review des Artikels&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Ich freue mich über jegliche Kommentare!&lt;/STRONG&gt;&lt;/P&gt;</description></item><item><title>SelfValidatingControl - CustomControl selber validieren lassen</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2007/06/22/selfvalidatingcontrol-customcontrol-selber-validieren-lassen.aspx</link><pubDate>Thu, 21 Jun 2007 22:24:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:181613</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Ich bin in der &lt;A href="http://groups.google.ch/group/microsoft.public.de.german.entwickler.dotnet.asp/topics?hl=de"&gt;Newsgroup&lt;/A&gt; über die &lt;A href="http://groups.google.ch/group/microsoft.public.de.german.entwickler.dotnet.asp/browse_thread/thread/b504a2ee2c4134c7/c77ea83679f6e117?hl=de#c77ea83679f6e117"&gt;Frage&lt;/A&gt; gestolpert, wie man ein sich selbst validierendes Control, ohne ein zusätzliches Custom Validator Control dazu bringen kann, die Eigenschaft &lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.page.isvalid(VS.80).aspx"&gt;IsValid&lt;/A&gt; von der aktuellen Page Instanz zu beeinflussen.&lt;/P&gt;
&lt;P&gt;Nun, wenn man ein bisschen nachforscht, findet man in der MSDN oder aber dem &lt;A href="http://www.aisto.com/roeder/dotnet/"&gt;Reflector&lt;/A&gt; die abstrakte Basisklasse &lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.webcontrols.basevalidator(VS.80).aspx"&gt;BaseValidator&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Folgend die Definition dieser Basisklasse:&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;abstract&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; BaseValidator : Label, IValidator&lt;/span&gt;&lt;/code&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Eine Klasse die von BaseValidator erbt, so wie das bei allen Validator Controls ausser der &lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.webcontrols.validationsummary(VS.80).aspx"&gt;ValiationSummary&lt;/A&gt; der Fall ist, erben also von &lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.webcontrols.label(VS.80).aspx"&gt;Label&lt;/A&gt; und implementieren das Interface &lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.ivalidator(VS.80).aspx"&gt;IValidator&lt;/A&gt;.&lt;BR&gt;Okay, für einen Validator an sich, mag es sinnvoll sein, sich wie ein Label zu verhalten, denn wir wollen schliesslich eine Fehlermeldung ausgeben.&lt;BR&gt;In einem CustomControl sieht das aber wieder anders aus, vorallem dann, wenn wir die Validation selber erledigen.&lt;/P&gt;
&lt;P&gt;Man kann / könnte die benötigten und schon im Framework vorhandenen Validatoren zu seinem CustomControl hinzufügen, und schliesslich auch veranlassen, dass diese Validatoren bei der Seitenüberprüfung berücksichtigt werden.&lt;BR&gt;Jedoch geht es m.E. leichter von der Hand, wenn man sein CustomControl validationsfähig macht, und die einzelnen Prüfungen, sowie auch die Fehlerausgabe im Control selber erledigt.&lt;/P&gt;
&lt;P&gt;Ich möchte euch anhand eines einfachen uns ziemlich sinnfreien Beispiels zeigen, wie man so etwas implementieren könnte.&lt;BR&gt;Eine Klasse das als Validator fungieren möchte, muss das Interface (Schnittstelle) &lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.ivalidator(VS.80).aspx"&gt;IValidator&lt;/A&gt; implementieren, als Basisklasse wählen wir in diesem Fall &lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.control(VS.80).aspx"&gt;Control&lt;/A&gt;, da wir kein einzelnes Haupt Element brauchen.&lt;BR&gt;Definition unseres CustomControls:&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; SelfValidatingControl : Control, IValidator&lt;/span&gt;&lt;/code&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;
&lt;P&gt;Als nächstes definieren wir die benötigten privaten Felder.&lt;BR&gt;_isValid brauchen wir als Hilfsvariable im Zusammenspiel mit der Validierung.&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;bool&lt;/span&gt;    _isValid &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; TextBox _txtSurname;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; TextBox _txtName;&lt;/span&gt;&lt;/code&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;
&lt;P&gt;Und jetzt geht es an die Implementation des CustomControls, hierzu erstellen wir im&amp;nbsp;Konstruktor&amp;nbsp;zwei TextBoxen und fügen sie zur Controls Collection hinzu.&lt;BR&gt;Zwischen die TextBoxen schieben der Einfachheit halber, LiteralControls, jeweils mit "Vorname", "Name" und den dazugehörigen Breaks dazu "&amp;lt;br /&amp;gt;".&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; SelfValidatingControl() {&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._txtSurname &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; TextBox();&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._txtName    &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; TextBox();&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; LiteralControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Vorname:"&lt;/span&gt;));&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; LiteralControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;));&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._txtSurname);&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; LiteralControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;));&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; LiteralControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Name:"&lt;/span&gt;));&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; LiteralControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;));&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._txtName);&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jetzt fehlen noch zwei wichtige Dinge:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Implementation der IValidator Schnittstelle 
&lt;LI&gt;Weitergabe des Validators an die Validator Collection der aktuellen Page Instanz&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Wenn wir die Schnittselle in der Klassendefinition niederschreiben, gibt uns Visual Studio die Möglichkeit, automatisch ein Grundgerüst für diese Schnittstelle zu erstellen. Nette Sache, machen wir :-)&lt;BR&gt;Die Eigenschaft "ErrorMessage" müssen wir implementieren, benutzen sie in diesem Fall aber nicht, deshalb ist auch der Setter leer.&lt;BR&gt;Bei der Eigenschaft "IsValid", geben wir den aktuellen Status anhand der Instanzvariable "_isValid" zurück, oder ändern diese.&lt;BR&gt;In der Validate Methode, wird die Validierung ausgeführt, und die Instanzvariable "_isValid" bei Erfolg auf true, und bei Misserfolg auf false gesetzt.&lt;BR&gt;Im konkreten Fall überprüfen wir nur, ob beide TextBoxen nicht leer sind, thats it.&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;#region&lt;/span&gt; IValidator Members &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; ErrorMessage&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Surname or Name empty"&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    set { ; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;bool&lt;/span&gt; IsValid&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._isValid;&lt;br /&gt;    }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._isValid &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; value;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Validate()&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._txtSurname.Text !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; String.Empty&lt;br /&gt;       &amp;amp;&amp;amp;&lt;br /&gt;       &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._txtName.Text !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; String.Empty)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._isValid &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;true&lt;/span&gt;;&lt;br /&gt;    } &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;else&lt;/span&gt; {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._isValid &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;false&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;#endregion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Und jetzt kommt der ganze Clou an der Sache.&lt;BR&gt;Wenn wir auf der aktuellen Page den Status per Page.IsValid abfragen, durchläuft die aktuelle Page Instanz ihre Validator Collection.&lt;BR&gt;Unser Control muss dort jetzt natürlich rein, da es, ausser einem Control, zusätzlich auch noch die Rolle eines Validators eingenommen hat.&lt;BR&gt;Dies erledigen wir, indem wir die OnInit Methode des Controls überschreiben und dort auf die aktuelle Page Instanz Zugreifen.&lt;BR&gt;Über die .Add Methode der Validator Collection, fügen wir über "this", die aktuelle Instanz unserer Control Klasse hinzu, also das Objekt, in dem wir uns im Moment befinden.&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; OnInit(EventArgs e)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;.OnInit(e);&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.Page.Validators.Add(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;);&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Auf der einer beliebigen Seite müssen wir nur noch unser Control deklerativ oder per Code einfügen.&lt;BR&gt;Ab diesem Moment ist die Page.IsValid Eigenschaft auch auf den Zustand dieses Controls sensibel.&lt;/P&gt;
&lt;P&gt;Beispielprojekt:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.aspnetzone.de/files/folders/181614/download.aspx"&gt;SelfValidatingControlTest&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Quellen:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpguide/html/cpconsupportingup-levelbrowsers.asp"&gt;Entwickeln eines Bestätigungssteuerelements (MSDN)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;</description></item><item><title>WaitButtonControl - Auf langes Postback warten</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2007/05/31/waitbuttoncontrol-auf-langes-postback-warten.aspx</link><pubDate>Thu, 31 May 2007 21:56:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:180624</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;IMG src="http://www.aspnetzone.de/photos/peterbucher/images/180625/original.aspx" align=right border=0&gt; 
&lt;P&gt;Wieder einmal (wie immer :-), wurde ich durch eine &lt;A href="http://www.mycsharp.de/wbb2/thread.php?postid=202824"&gt;Frage&lt;/A&gt; im Forum angeregt.&lt;BR&gt;Es ging darum, einen Button zu haben, der nach dem Klicken sofort deaktiviert wird, einen Hinweistext darstellt und trotzdem noch ein normales PostBack inkl.&amp;nbsp;"Absenderadresse"&amp;nbsp;versendet.&lt;/P&gt;
&lt;P&gt;Die Lösung war am Ende folgende (Im Page_Load bspw.):&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.&amp;lt;Button&amp;gt;.Attributes.Add(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"onclick"&lt;/span&gt;, &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"this.disabled = true; this.value = 'Bitte warten...'; "&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; ClientScript.GetPostBackEventReference(&amp;lt;Button&amp;gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;));&lt;/span&gt;&lt;/code&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Nun gut, es funktioniert, ist relativ schnell geschrieben - aber:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Man muss es trotzdem immer wieder schreiben 
&lt;LI&gt;Es ist schlussendlich Code, der das Gesamtbild aufbläht 
&lt;LI&gt;Wenn man eine zusätzliche Funktionalität möchte, muss man es überall nachtragen 
&lt;LI&gt;Schlussendlich endet das in der Copy&amp;amp;Paste Hell ;-)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Genau für so etwas ist ein ASP.NET CustomControl sehr gut geeignet.&lt;BR&gt;Es folgt der Quellcode des Controls und ein Beispiel zum Herunterladen und Probieren.&lt;/P&gt;&lt;STRONG&gt;WaitButton.cs&lt;/STRONG&gt; 
&lt;P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;using&lt;/span&gt; System.Web.UI;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;using&lt;/span&gt; System.Web.UI.WebControls;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;using&lt;/span&gt; System.ComponentModel; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;namespace&lt;/span&gt; t4m.Controls&lt;br /&gt;{&lt;br /&gt;    [DefaultProperty(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"WaitText"&lt;/span&gt;)]&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; WaitButton : Button&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;const&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; DefaultWaitText &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Bitte warten..."&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;bool&lt;/span&gt; _wait       &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;true&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; _waitText &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; DefaultWaitText;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;bool&lt;/span&gt; Wait {&lt;br /&gt;            get { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._wait; }&lt;br /&gt;            set { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._wait &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; WaitText {&lt;br /&gt;            get { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._waitText; }&lt;br /&gt;            set { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._waitText &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._wait)&lt;br /&gt;                writer.AddAttribute(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"onclick"&lt;/span&gt;,&lt;br /&gt;                    &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"this.disabled = true;"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"this.value    = '"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;                    (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._waitText == DefaultWaitText ? DefaultWaitText : &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._waitText) &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"';"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt;&lt;br /&gt;                    Page.ClientScript.GetPostBackEventReference(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;.AddAttributesToRender(writer);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Beispielprojekt:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.aspnetzone.de/files/folders/180626/download.aspx"&gt;WaitButton Test Projekt&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Weiterführende Links:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.webcontrols.webcontrol.addattributestorender(VS.80).aspx"&gt;WebControl.AddAttributesToRender-Methode&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.page.getpostbackeventreference(vs.80).aspx"&gt;Page.GetPostBackEventReference-Methode&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;</description></item><item><title>WaitButton Test Projekt</title><link>http://www.aspnetzone.de/files/folders/peterbucher/entry180626.aspx</link><pubDate>Thu, 31 May 2007 21:49:53 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:180626</guid><dc:creator>Peter Bucher</dc:creator><description>-</description></item><item><title>Identifizierung von Controls: Control.ID / .ClientID / .UniqueID - UserControlTest</title><link>http://www.aspnetzone.de/files/folders/peterbucher/entry178463.aspx</link><pubDate>Mon, 09 Apr 2007 19:49:04 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:178463</guid><dc:creator>Peter Bucher</dc:creator><description>-</description></item><item><title>Control Identifizierung Beispiel</title><link>http://www.aspnetzone.de/photos/peterbucher/images/178462/original.aspx</link><pubDate>Mon, 09 Apr 2007 19:28:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:178462</guid><dc:creator>Peter Bucher</dc:creator><description /></item></channel></rss>