<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kay&#039;s Technologie Backlog &#187; ASP.NET MVC</title>
	<atom:link href="http://www.herzam.com/blog/category/asp-net-mvc/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.herzam.com/blog</link>
	<description>So much technology, so little time</description>
	<lastBuildDate>Thu, 11 Feb 2010 09:11:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>T4MVC Toolkit</title>
		<link>http://www.herzam.com/blog/2009/12/08/t4mvc-toolkit/</link>
		<comments>http://www.herzam.com/blog/2009/12/08/t4mvc-toolkit/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 20:32:27 +0000</pubDate>
		<dc:creator>kay.herzam</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.herzam.com/blog/?p=333</guid>
		<description><![CDATA[Ich habe endlich die Zeit gefunden, mir erste Videos von der PDC 09 anzuschauen. Angefangen habe ich mit &#8220;ASP.NET MVC 2: Ninjas Still on Fire Black Belt Tips&#8221; von Scott Hanselman.
Scott zeigt in dieser Präsentation einige Neuerungen in der kommenden Version 2 des MVC Frameworks, sowie auch ein paar ziemlich coole Dinge, welche einem die [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe endlich die Zeit gefunden, mir erste Videos von der PDC 09 anzuschauen. Angefangen habe ich mit &#8220;<a href="http://microsoftpdc.com/Sessions/FT59">ASP.NET MVC 2: Ninjas Still on Fire Black Belt Tips</a>&#8221; von <a href="http://www.hanselman.com/blog/PDC09ASPNETMVC2NinjasStillOnFireBlackBeltTips.aspx">Scott Hanselman</a>.<br />
Scott zeigt in dieser Präsentation einige Neuerungen in der kommenden Version 2 des MVC Frameworks, sowie auch ein paar ziemlich coole Dinge, welche einem die Entwicklung wirklich erleichtern.<br />
Eine wahre Perle, die ich bisher nicht gekannt habe, und die von nun an fester Bestandteil eines jeden MVC Projektes sein wird, ist das <a href="http://aspnet.codeplex.com/wikipage?title=T4MVC">T4MVC</a> Toolkit.<br />
Dass die in Visual Studio eingebaute T4 Engine ziemlich mächtig ist, war mir schon bewusst (Einführung <a href="http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx">hier</a>), schliesslich verwende ich ja auch eigene Templates in den MVC Projekten (dies wird im Video auch gezeigt).</p>
<p>T4MVC geht aber noch viel weiter. Durch ein simples Kopieren zweier .tt Dateien ins Projekt stehen einem eine stattliche Anzahl stark typisierter Helper Klassen zur Verfügung, welche sich selber automatisch bei jedem Build aktualisieren.</p>
<p>So wird aus</p>
<pre class="brush: xml;">&lt;% Html.RenderPartial(&quot;UserControlName&quot;); %&gt;</pre>
<p>die typisierte Variante</p>
<pre class="brush: xml;">&lt;% Html.RenderPartial(MVC.ProjektName.Views.UserControlName); %&gt;</pre>
<p>Nebst allen Views ist dasselbe verfügbar für alle Controller Actions und es werden Klassen für stark typisierte Links zu Script Files und statischen Ressourcen erzeugt.</p>
<p>Aus</p>
<pre class="brush: xml;">&lt;img src=&quot;/Content/bild.jpg&quot; /&gt;</pre>
<p>wird also</p>
<pre class="brush: xml;">&lt;img src=&quot;&lt;%= Links.Content.bild_jpg %&gt;&quot; /&gt;</pre>
<p>Die kommende Version 5 von <a href="http://www.jetbrains.com/resharper">Resharper</a> wird einige praktische Refactorings für MVC an Bord haben, welche auch &#8220;Magic Strings&#8221; in Action Links und dergleichen berücksichtigt, besser ist es jedoch, solche potentielle Baustellen gar nicht erst entstehen zu lassen. T4MVC hilft einem dabei.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herzam.com/blog/2009/12/08/t4mvc-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC Bücher</title>
		<link>http://www.herzam.com/blog/2009/12/01/asp-net-mvc-bucher/</link>
		<comments>http://www.herzam.com/blog/2009/12/01/asp-net-mvc-bucher/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 20:45:43 +0000</pubDate>
		<dc:creator>kay.herzam</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Mvc]]></category>
		<category><![CDATA[MvcContrib]]></category>

		<guid isPermaLink="false">http://www.herzam.com/blog/?p=313</guid>
		<description><![CDATA[Mein bei Manning bestelltes Buch ist nach langer Wartezeit endlich auch in Papierform eingetroffen. ASP.NET MVC in Action ist meiner Meinung nach das zurzeit beste Buch zu diesem Thema. Auf knapp 400 Seiten wird alles Wesentliche zum MVC Framework beleuchtet.
Dabei werden nicht nur einfach alle zu einem typischen MVC Projekt gehörenden Komponenten vorgestellt (sofern es [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.de/gp/product/1933988622?ie=UTF8&amp;tag=sonicbits-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=1933988622"><img class="size-full wp-image-317 alignleft" title="ASP.NET MVC in Action" src="http://www.herzam.com/blog/wp-content/uploads/2009/12/aspnetmvcinaction.jpg" alt="ASP.NET MVC in Action" width="129" height="160" /></a><a href="http://www.amazon.de/gp/product/1933988622?ie=UTF8&amp;tag=sonicbits-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=1933988622">Mein bei </a><a href="http://www.manning.com/">Manning</a> bestelltes Buch ist nach langer Wartezeit endlich auch in Papierform eingetroffen. <a href="http://www.amazon.de/gp/product/1933988622?ie=UTF8&amp;tag=sonicbits-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=1933988622">ASP.NET MVC in Action</a> ist meiner Meinung nach das zurzeit beste Buch zu diesem Thema. Auf knapp 400 Seiten wird alles Wesentliche zum MVC Framework beleuchtet.<br />
Dabei werden nicht nur einfach alle zu einem typischen MVC Projekt gehörenden Komponenten vorgestellt (sofern es soetwas überhaupt gibt). Die Autoren, welche sich unter anderem auch für das <a href="http://mvccontrib.codeplex.com">MvcContrib</a> Projekt verantwortlich zeichnen, legen vor allem auch Wert auf die Modell- und Test-getriebene Entwicklung (DDD / TDD).<br />
Besonders gut gefallen haben mir auch die Best Practices Kapitel am Ende, sowie einige Hinweise zum Projekt Aufbau und der Architektur mit NHibernate.<br />
Erfreulich ist auch, dass Manning das Buch nachträglich auch in Formaten für eBook Reader anbietet.</p>
<p><a href="http://www.amazon.de/gp/product/1430210079?ie=UTF8&amp;tag=sonicbits-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=1430210079"><img class="alignleft size-full wp-image-325" title="Pro ASP.NET MVC Framework" src="http://www.herzam.com/blog/wp-content/uploads/2009/12/proaspnetmvc.jpg" alt="Pro ASP.NET MVC Framework" width="84" height="110" /></a>Meine zweite Empfehlung, um sich in das Thema einzuarbeiten, ist <a href="http://www.amazon.de/gp/product/1430210079?ie=UTF8&amp;tag=sonicbits-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=1430210079">Pro ASP.NET MVC Framework</a> von <a href="http://blog.codeville.net/">Steve Sanderson</a>, dem Autor von <a href="http://blog.codeville.net/2009/09/17/xval-v10-now-available/">xVal</a>.<br />
Im ersten Teil werden anhand eines Beispielprojekts alle relevanten Komponenten des ASP.NET MVC Frameworks vorgestellt. Im zweiten Buchteil werden das Routing, Controller, Views und die Dateneingabe im Detail erklärt. Gerade die Eingabe und die Verarbeitung von Daten aus Formularen benötigt besondere Beachtung, das im Vergleich zu regulären ASP.NET Projekten einiges anders gelöst wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herzam.com/blog/2009/12/01/asp-net-mvc-bucher/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neue UI Komponente GoogleMaps für ASP.NET MVC</title>
		<link>http://www.herzam.com/blog/2009/11/11/neue-ui-komponente-googlemaps-fur-asp-net-mvc/</link>
		<comments>http://www.herzam.com/blog/2009/11/11/neue-ui-komponente-googlemaps-fur-asp-net-mvc/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 08:38:44 +0000</pubDate>
		<dc:creator>kay.herzam</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[etcetera.Mvc]]></category>

		<guid isPermaLink="false">http://www.herzam.com/blog/?p=296</guid>
		<description><![CDATA[Ich habe eine neue HTML Helper Komponente in meine Library etcetera.Mvc aufgenommen. Die macht es möglich, mit wenigen Zeilen im View die bekannten Google Maps auf der Seite darzustellen:

Der Html Helper unterstützt alle Steuerelemente, welche Google in ihrem API anbietet. Das obenstehende Beispiel wurde mit folgendem Aufruf erzeugt:

&#60;%= Html.GoogleMap()
       [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe eine neue HTML Helper Komponente in meine Library <a href="http://etceteramvc.codeplex.com">etcetera.Mvc</a> aufgenommen. Die macht es möglich, mit wenigen Zeilen im View die bekannten Google Maps auf der Seite darzustellen:</p>
<p><a href="http://www.herzam.com/blog/wp-content/uploads/2009/11/googlemaps.gif"><img class="alignnone size-full wp-image-297" title="Google Maps" src="http://www.herzam.com/blog/wp-content/uploads/2009/11/googlemaps.gif" alt="Google Maps" width="512" height="385" /></a></p>
<p>Der Html Helper unterstützt alle Steuerelemente, welche Google in ihrem API anbietet. Das obenstehende Beispiel wurde mit folgendem Aufruf erzeugt:</p>
<pre class="brush: csharp;">
&lt;%= Html.GoogleMap()
        .Width(640)
        .Height(480)
        .ApiKey(&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;)
        .Language(MapLanguage.de)
        .Coordinates(&quot;47.1,8.1&quot;)
        .ZoomLevel(8)
        .ScrollZoom()
        .EnableMapType(MapType.Map)
        .EnableOverviewMap()
        .ZoomControlType(MapZoomControlType.LargeMapControl3D)
        .ScrollZoom()
        .Markers(new List&lt;Marker&gt;
                     {
                       new Marker(&quot;47.1, 8.1&quot;, &quot;I'm a test bubble.&quot;),
                       new Marker(&quot;47.2, 8.2&quot;, &quot;I can describe &lt;strong&gt;interesting&lt;/strong&gt; &lt;br /&gt;places using HTML.&quot;, true)
                     })
 %&gt;
</pre>
<p>Die Komponente steht vorerst nur <a href="http://etceteramvc.codeplex.com/SourceControl/ListDownloadableCommits.aspx">via Source Code</a> zur Verfügung, ein Release folgt bald.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herzam.com/blog/2009/11/11/neue-ui-komponente-googlemaps-fur-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Routing mit ASP.NET WebForms, Teil 1</title>
		<link>http://www.herzam.com/blog/2009/10/28/routing-mit-asp-net-webforms-teil-1/</link>
		<comments>http://www.herzam.com/blog/2009/10/28/routing-mit-asp-net-webforms-teil-1/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 19:58:05 +0000</pubDate>
		<dc:creator>kay.herzam</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://www.herzam.com/blog/?p=228</guid>
		<description><![CDATA[Einer der Gründe, weshalb ich das ASP.NET MVC Framework mag, ist die durchgehende Verwendung der sehr flexiblen Routing Engine. In einem MVC Projekt ist das Addressierungsschema komplett vom physikalischen Filesystem getrennt. So lassen sich einfach Applikationen im REST Stil bauen. Adressen wie &#8220;http://applikation/Kunde/42&#8243; oder &#8220;http://applikation/Kunde/42/Bestellungen&#8221; sind auch deutlich SEO freundlicher als die direkte Adressierung auf [...]]]></description>
			<content:encoded><![CDATA[<p>Einer der Gründe, weshalb ich das ASP.NET MVC Framework mag, ist die durchgehende Verwendung der sehr flexiblen Routing Engine. In einem MVC Projekt ist das Addressierungsschema komplett vom physikalischen Filesystem getrennt. So lassen sich einfach Applikationen im <a href="http://de.wikipedia.org/wiki/Representational_State_Transfer">REST</a> Stil bauen. Adressen wie &#8220;http://applikation/Kunde/42&#8243; oder &#8220;http://applikation/Kunde/42/Bestellungen&#8221; sind auch deutlich <a href="http://de.wikipedia.org/wiki/Search_Engine_Optimization">SEO</a> freundlicher als die direkte Adressierung auf ein physikalisch vorhandenes File.</p>
<p>Die Routing Engine ist jedoch nicht Bestandteil des MVC Frameworks, sondern wurde mit .NET 3.5 SP1 eingeführt. Somit kann sie auch in einem WebForm Projekt verwendet werden. Der Aufwand hält sich dabei in Grenzen, das ganze ist recht schnell umgesetzt.</p>
<p>Teil 1 dieses Artikels zeigt die Konfiguration der Routing Engine in einer WebForms Applikation und das Anlegen eigener Routen. In einem zweiten Teil werden dann die Security Einstellungen betrachtet.</p>
<h3>Konfiguration der WebForms Applikation</h3>
<p>Um die Routing Engine nutzen zu können, müssen im Projekt zwei Verweise gesetzt werden: System.Web.Routing und System.Web.Abstractions sind beide im GAC installiert, sie können einfach über &#8220;Add Reference&#8221; hinzugefügt werden.</p>
<p>Danach muss das Routing Modul im web.config in die Request Pipeline konfiguriert werden. Unter <strong>IIS 6</strong> geschieht dies wie folgt:</p>
<pre class="brush: xml;">
&lt;httpModules&gt;
  ...
  &lt;add name=&quot;RoutingModule&quot;
       type=&quot;System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&quot; /&gt;
</pre>
<p>Wenn <strong>IIS 7</strong> verwendet wird, müssen die folgenden Einträge gemacht werden:</p>
<pre class="brush: xml;">
&lt;system.webServer&gt;
  &lt;modules runAllManagedModulesForAllRequests=&quot;true&quot;&gt;
    ...
    &lt;add name=&quot;UrlRoutingModule&quot;
         type=&quot;System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;&quot; /&gt;
    ...
  &lt;/modules&gt;

  &lt;handlers&gt;
    ...
    &lt;add name=&quot;UrlRoutingHandler&quot;
         preCondition=&quot;integratedMode&quot;
         verb=&quot;*&quot; path=&quot;UrlRouting.axd&quot;
         type=&quot;System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot; /&gt;
    ...
  &lt;/handlers&gt;
&lt;/system.webServer&gt;
</pre>
<p>Wenn die Zielumgebung bekannt ist, kann auf die eine Variante verzichtet werden, Einträge für IIS 6 werden allerdings vom IIS 7 ignoriert, und umgekehrt auch, so dass getrost beide Varianten eingetragen werden können.</p>
<h3>Konfiguration der Routen</h3>
<p>Falls nicht bereits vorhanden, wird eine global.asax Datei zum Projekt hinzugefügt. In dessen Application_Start Event können die Routen eingetragen werden. Eine Route hat immer einen eindeutigen Namen, definiert ein Adressenmuster und legt fest, von welchem Handler Anfragen an diese Adresse bearbeitet werden:</p>
<pre class="brush: csharp;">
RouteTable.Routes.Add(&quot;Customers&quot;, new Route(&quot;customer/&quot;, new PageRouteHandler(&quot;~/Customers/Customers.aspx&quot;)));
RouteTable.Routes.Add(&quot;CustomerDetails&quot;, new Route(&quot;customer/{id}&quot;, new PageRouteHandler(&quot;~/Customers/CustomerDetails.aspx&quot;)));
</pre>
<p>Dies erstellt zwei Einträge in der Routing Tabelle. Der zweite Eintrag verwendet einen Parameter &#8220;id&#8221;, wenn also ein Request in der Form &#8220;customer/42&#8243; eintrifft, wird dieser Eintrag verwendet.</p>
<p>Zu beachten ist, dass beim Eintreffen eines Requests diese Routing Tabelle von oben nach unten abgearbeitet wird, und der erste zur Request Adresse passende Eintrag verwendet wird. Nachfolgende Einträge werden ignoriert.</p>
<p>Nun muss der PageRouteHandler angelegt werden, welcher diese Anfragen bearbeiten kann. Dies ist eine Klasse, welche das IRouteHandler Interface implementiert:</p>
<pre class="brush: csharp;">
public class PageRouteHandler : IRouteHandler
{
    private readonly string _virtualPath;

    public PageRouteHandler(string virtualPath)
    {
        _virtualPath = virtualPath;
    }

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
       var page = BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(Page));
       return (IHttpHandler)page;
    }
}
</pre>
<p>Dies ist bereits alles, was benötigt wird, um eigene Routen zu definieren und an Webforms weiterzuleiten. Jedoch gelangt im zweiten Fall, wenn eine ID übergeben wird, diese nicht bis zum Webform. Dies kann gelöst werden, indem innerhalb des Routing Handlers die Routing Daten des RequestContext an das Webform weitergeleitet werden. Die Methode GetHttpHandler sieht also wie folgt aus:</p>
<pre class="brush: csharp;">
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
    var page = BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(Page));

    var queryString = new StringBuilder(&quot;?&quot;);
    foreach (var rdv in requestContext.RouteData.Values)
    {
        queryString.Append(requestContext.HttpContext.Server.UrlEncode(rdv.Key));
        queryString.Append(&quot;=&quot;);
        queryString.Append(requestContext.HttpContext.Server.UrlEncode(rdv.Value.ToString()));
        queryString.Append(&quot;&amp;&quot;);
    }
    queryString.Remove(queryString.Length - 1, 1);

    HttpContext.Current.RewritePath(string.Concat(_virtualPath, queryString));

    return (IHttpHandler)page;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.herzam.com/blog/2009/10/28/routing-mit-asp-net-webforms-teil-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neue UI Komponente DropDownListEx für ASP.NET MVC</title>
		<link>http://www.herzam.com/blog/2009/10/26/neue-ui-komponente-dropdownlistex-fur-asp-net-mvc/</link>
		<comments>http://www.herzam.com/blog/2009/10/26/neue-ui-komponente-dropdownlistex-fur-asp-net-mvc/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 20:20:24 +0000</pubDate>
		<dc:creator>kay.herzam</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[etcetera.Mvc]]></category>
		<category><![CDATA[CodePlex]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://www.herzam.com/blog/?p=256</guid>
		<description><![CDATA[Ein den meisten (MS) Entwicklern unbekanntes HTML Tag ist das &#60;optgroup&#62; Element. Unter Umständen liegt dies daran, dass das Element in ASP.NET nicht direkt durch ein Server Control unterstützt wird.
Das &#60;optgroup&#62; Element kann innerhalb von Dropdown Listen verwendet werden, um die einzelnen Optionen zu gliedern. So lässt sich einfach eine zweistufige Hierarchie darstellen, HTML konform.
Das [...]]]></description>
			<content:encoded><![CDATA[<p>Ein den meisten (MS) Entwicklern unbekanntes HTML Tag ist das &lt;optgroup&gt; Element. Unter Umständen liegt dies daran, dass das Element in ASP.NET nicht direkt durch ein Server Control unterstützt wird.<br />
Das &lt;optgroup&gt; Element kann innerhalb von Dropdown Listen verwendet werden, um die einzelnen Optionen zu gliedern. So lässt sich einfach eine zweistufige Hierarchie darstellen, HTML konform.</p>
<p>Das Markup für eine solche Dropdown Liste wird wie folgt definiert:</p>
<pre class="brush: xml;">
&lt;select id=&quot;GameConsole&quot; name=&quot;GameConsole&quot;&gt;
 &lt;option value=&quot;&quot;&gt;Select your favorite...&lt;/option&gt;
 &lt;optgroup label=&quot;Microsoft&quot;&gt;
   &lt;option value=&quot;1&quot;&gt;XBox&lt;/option&gt;
   &lt;option value=&quot;2&quot;&gt;XBox 360&lt;/option&gt;
 &lt;/optgroup&gt;
 &lt;optgroup label=&quot;Nintendo&quot;&gt;
   &lt;option value=&quot;3&quot;&gt;Wii&lt;/option&gt;
   &lt;option value=&quot;4&quot;&gt;Gameboy&lt;/option&gt;
 &lt;/optgroup&gt;
 &lt;optgroup label=&quot;Sega&quot;&gt;
   &lt;option value=&quot;5&quot;&gt;Dreamcast&lt;/option&gt;
 &lt;/optgroup&gt;
 &lt;optgroup label=&quot;Sony&quot;&gt;
   &lt;option value=&quot;6&quot;&gt;Playstation&lt;/option&gt;
   &lt;option value=&quot;7&quot;&gt;Playstation 2&lt;/option&gt;
   &lt;option value=&quot;8&quot;&gt;Playstation 3&lt;/option&gt;
   &lt;option value=&quot;9&quot;&gt;PSP&lt;/option&gt;
 &lt;/optgroup&gt;
&lt;/select&gt;</pre>
<p>Ich habe eine neue HTML Helper Komponente DropDownListEx in meine Library etcetera.Mvc aufgenommen. Diese unterstützt das eben beschriebene Tag.</p>
<div id="attachment_260" class="wp-caption alignnone" style="width: 156px"><a href="http://www.herzam.com/blog/wp-content/uploads/2009/10/dropdownlistex.gif"><img class="size-full wp-image-260" title="etcetera.Mvc DropDownListEx" src="http://www.herzam.com/blog/wp-content/uploads/2009/10/dropdownlistex.gif" alt="etcetera.Mvc DropDownListEx" width="146" height="382" /></a><p class="wp-caption-text">etcetera.Mvc DropDownListEx</p></div>
<p>Dazu habe ich auch eine Hilfsklasse OptionGroupSelectList erstellt, welche eine ähnliche Aufgabe wie die SelectList erfüllt. Die DropDownListEx erwartet im Konstruktor eine solche OptionGroupSelectList. Diese kann vom Controller wie folgt erstellt werden:</p>
<pre class="brush: csharp;">
GameConsoleViewModel gcvm = new GameConsoleViewModel();
gcvm.GameConsoles = new OptionGroupSelectList&lt;GameConsole&gt;(gameConsoles,
                                                           x =&gt; x.Id,
                                                           x =&gt; x.Name,
                                                           x =&gt; x.Manufacturer.Name);
ViewData.Model = gcvm;
</pre>
<p>Die drei Lambda Expressions geben die jeweiligen Properties des Aufzählungstyps für das Wert und Namensfeld der Optionen, sowie das Label der Option Group an.</p>
<p>Im View kann der HTML Helper wie folgt aufgerufen werden:</p>
<pre class="brush: xml;">
&lt;%= Html.DropDownListEx(&quot;GameConsole&quot;, Model.GameConsoles, &quot;Select your favorite...&quot;) %&gt;
</pre>
<p>Ich habe noch keinen Release erstellt, die Komponente ist bislang nur als <a href="http://etceteramvc.codeplex.com/SourceControl/ListDownloadableCommits.aspx">Source Code</a> verfügbar. Ich werde aber bald einen Release erstellen, welcher auch noch weitere Komponenten enthalten wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herzam.com/blog/2009/10/26/neue-ui-komponente-dropdownlistex-fur-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>etcetera.Mvc: Meine MVC Library</title>
		<link>http://www.herzam.com/blog/2009/10/23/etcetera-mvc-meine-mvc-library/</link>
		<comments>http://www.herzam.com/blog/2009/10/23/etcetera-mvc-meine-mvc-library/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 21:32:04 +0000</pubDate>
		<dc:creator>kay.herzam</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[etcetera.Mvc]]></category>
		<category><![CDATA[CodePlex]]></category>
		<category><![CDATA[MvcContrib]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://www.herzam.com/blog/?p=243</guid>
		<description><![CDATA[Ich mag das ASP.NET MVC Framework. Wenn ich die Wahl habe, ziehe ich ein MVC Projekt mittlerweile einem WebForms basierten vor. Die offene Architektur, Flexibilität, Testbarkeit und vor allem die Erweiterbarkeit machen es zu einer Freude Webprojekte zu entwickeln.
Wer mit dem MVC Framework beginnt, wird unweigerlich auf das MvcContrib Projekt stossen. Dieses erweitert das Framework [...]]]></description>
			<content:encoded><![CDATA[<p>Ich mag <a href="http://asp.net/mvc">das ASP.NET MVC Framework</a>. Wenn ich die Wahl habe, ziehe ich ein MVC Projekt mittlerweile einem WebForms basierten vor. Die offene Architektur, Flexibilität, Testbarkeit und vor allem die Erweiterbarkeit machen es zu einer Freude Webprojekte zu entwickeln.<br />
Wer mit dem MVC Framework beginnt, wird unweigerlich auf <a href="http://mvccontrib.codeplex.com">das MvcContrib Projekt</a> stossen. Dieses erweitert das Framework an allen Ecken und Enden.<br />
Gerade zu Beginn wird man die ASP.NET Server Controls vermissen. Die mitgelieferten HTML Helper sind zwar sehr komfortabel, decken aber nur das allernötigste ab. Unterstützung für komplexere GUI Elemente wie ein Grid sucht man vergebens.<br />
Das MvcContrib Projekt enthält nebst vielen nützlichen Dingen wie alternativen ViewEngines, Controller Factories und Routing Unterstützung auch einen grossen Satz HTML Helper. Die mächtigste UI Komponente ist in meinen Augen <a href="http://mvccontrib.codeplex.com/wikipage?title=Grid&amp;referringTitle=Documentation">das Grid</a>.</p>
<p>In meinen MVC Projekten habe ich nach anfänglichen Rumspielen mit <a href="http://jQuery.com">jQuery</a> Plugins für tabellarische Daten ausschliesslich das MvcContrib Grid verwendet, habe aber bald begonnen, dieses so zu erweitern, dass auch AJAX basiertes Paging und ein Sortieren der Spalten in einem HTML Helper gekapselt wurden.<br />
Das ganze hat sich zu einer kleinen Library gemausert, die ich nun auf <a href="http://www.codeplex.com">CodePlex</a> als Open Source Projekt veröffentlicht habe. Das Projekt nennt sich <a href="http://etceteramvc.comdeplex.com">etcetera.Mvc</a> und ist in einer ersten <a href="http://etceteramvc.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34481#DownloadId=87805">Version 0.1</a> verfügbar.</p>
<p>Momentan sind drei UI Komponenten enthalten:</p>
<h3>Grid</h3>
<div id="attachment_246" class="wp-caption alignnone" style="width: 583px"><a href="http://www.herzam.com/blog/wp-content/uploads/2009/10/gridex.gif"><img class="size-full wp-image-246" title="etcetera.Mvc Grid" src="http://www.herzam.com/blog/wp-content/uploads/2009/10/gridex.gif" alt="etcetera.Mvc Grid" width="573" height="306" /></a><p class="wp-caption-text">etcetera.Mvc Grid</p></div>
<p>Das Grid basiert auf demjenigen von MvcContrib. Dazu gehört eine separate und flexibel konfigurierbare Toolbar, welche für das Paging eingesetzt werden kann. Das Grid verwendet den selben Syntax wie MvcContrib undfügt folgendes hinzu:</p>
<ul>
<li>Effizientes asynchrones Paging via AJAX ohne eine einzige Zeile eigenem JavaScript</li>
<li>Falls der Client kein JavaScript unterstützt, werden regulare Seiten Requests ausgeführt.</li>
<li>Sortierbare Spalten</li>
<li>Optionaler Grid Header welcher das Grid ein- und ausfahren kann</li>
<li>Toolbar für das Paging, mit Anzeige und direkter Wahl der Seitennummer</li>
<li>Die Toolbar kann einfach und beliebig auch mit eigenen Buttons erweitert werden</li>
<li>Konfigurierbarer Export der Grid Daten nach Excel</li>
<li>Alle Labels und Tooltips können selber definiert werden</li>
</ul>
<p>Das Grid enthält ein jQuery Plugin, die Beispiel Icons und Stylesheets des Screenshots.</p>
<h3>Kalender</h3>
<div id="attachment_247" class="wp-caption alignnone" style="width: 599px"><a href="http://www.herzam.com/blog/wp-content/uploads/2009/10/calendar.gif"><img class="size-full wp-image-247" title="etcetera.Mvc Calendar" src="http://www.herzam.com/blog/wp-content/uploads/2009/10/calendar.gif" alt="etcetera.Mvc Calendar" width="589" height="293" /></a><p class="wp-caption-text">etcetera.Mvc Calendar</p></div>
<p>Der Kalender zeigt eine Monatsansicht und unterstützt die Anzeige von Einträgen wie Meetings. Die Kalender Datenstrukturen sind komplett unabhängig von eigenen Projekten. Der Kalender unterstützt folgende Einstellungen:</p>
<ul>
<li>Den Wochentag, an dem die Woche beginnt. In den USA ist dies z.B. der Sonntag.</li>
<li>Anzeige der Tage des Vor- und Folgemonats</li>
<li>Highlighting des aktuellen Tags</li>
<li>Komplette Kontrolle über die Links zu Einträgen oder Daten</li>
</ul>
<p>Wie die anderen UI Komponenten lässt sich das Aussehen komplett über Stylesheets definieren.</p>
<h3>Progressbar</h3>
<div id="attachment_248" class="wp-caption alignnone" style="width: 312px"><a href="http://www.herzam.com/blog/wp-content/uploads/2009/10/progressbar.gif"><img class="size-full wp-image-248" title="etcetera.Mvc Progressbar" src="http://www.herzam.com/blog/wp-content/uploads/2009/10/progressbar.gif" alt="etcetera.Mvc Progressbar" width="302" height="20" /></a><p class="wp-caption-text">etcetera.Mvc Progressbar</p></div>
<p>Die Progressbar ist ein sehr simples Element. Ich habe es hauptsächlich dafür benötigt, um <a href="http://jqueryui.com/demos/progressbar/">die Progressbar von jQuery-UI</a> zu ersetzen.</p>
<p>Weitere Komponenten und Framework Erweiterungen werden folgen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herzam.com/blog/2009/10/23/etcetera-mvc-meine-mvc-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security Trimming mit ASP.NET MVC</title>
		<link>http://www.herzam.com/blog/2009/10/14/security-trimming-mit-asp-net-mvc/</link>
		<comments>http://www.herzam.com/blog/2009/10/14/security-trimming-mit-asp-net-mvc/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 19:35:02 +0000</pubDate>
		<dc:creator>kay.herzam</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Membership]]></category>
		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://www.herzam.com/blog/?p=193</guid>
		<description><![CDATA[Einer der grossen Pluspunkte des ASP.NET MVC Frameworks ist, dass viel von der bestehenden ASP.NET Infrastruktur weiterverwendet werden kann. In einigen wenigen Fällen lassen sich auch die WebForm Server Controls sinnvoll einsetzen. Dies ist möglich, solange die Standard WebFormViewEngine verwendet wird.
Ein sehr praktisches Feature der klassischen Webforms ist das Security Trimming, also das Anzeigen von [...]]]></description>
			<content:encoded><![CDATA[<p>Einer der grossen Pluspunkte des ASP.NET MVC Frameworks ist, dass viel von der bestehenden ASP.NET Infrastruktur weiterverwendet werden kann. In einigen wenigen Fällen lassen sich auch die WebForm Server Controls sinnvoll einsetzen. Dies ist möglich, solange die Standard WebFormViewEngine verwendet wird.</p>
<p>Ein sehr praktisches Feature der klassischen Webforms ist das Security Trimming, also das Anzeigen von rollenbasierten Inhalten. Je nach Rolle, welche der eingeloggte Benutzer zugewiesen hat, werden ihm nur für diese Rolle passende Inhalte angezeigt. Das ganze Membership System der Webforms wird vom MVC Framework unterstützt. Auch das LoginView Control lässt sich im MVC Framework verwenden, da es keinen ViewState benötigt:</p>
<pre class="brush: xml;">&lt;asp:LoginView ID=&quot;LoginView1&quot; runat=&quot;server&quot;&gt;
  &lt;AnonymousTemplate&gt;I can be seen when the user is Anonymous.&lt;/AnonymousTemplate&gt;
  &lt;LoggedInTemplate&gt;I can only be seen when a user without group membership is logged in.&lt;/LoggedInTemplate&gt;
  &lt;RoleGroups&gt;
    &lt;asp:RoleGroup Roles=&quot;Admin,User&quot;&gt;
      &lt;ContentTemplate&gt;Only users with the &quot;Admin&quot; and &quot;User&quot; role can see this.&lt;/ContentTemplate&gt;
    &lt;/asp:RoleGroup&gt;
    &lt;asp:RoleGroup Roles=&quot;Admin&quot;&gt;
      &lt;ContentTemplate&gt;Only users with the &quot;Admin&quot; role can see this.&lt;/ContentTemplate&gt;
    &lt;/asp:RoleGroup&gt;
    &lt;asp:RoleGroup Roles=&quot;User&quot;&gt;
      &lt;ContentTemplate&gt;Only users with the &quot;User&quot; role can see this.&lt;/ContentTemplate&gt;
    &lt;/asp:RoleGroup&gt;
  &lt;/RoleGroups&gt;
&lt;/asp:LoginView&gt;</pre>
<p>Zu beachten ist, dass die RoleGroups Templates der Reihe nach ausgewertet werden. Nur das erste zu einer Benutzerrolle passende Template wird angezeigt, die anderen nicht. Wenn sich also im Beispielprojekt ein Benutzer mit einer &#8220;User&#8221; Rolle einloggt, wird er nur das erste RoleGroup Template sehen.<br />
Das LoggedInTemplate wird nur dann angezeigt, wenn kein RoleGroup Template zur Benutzerrolle passt.</p>
<p>Ich habe ein Beispielprojekt zusammengestellt, welches das LoginView Control im Einsatz zeigt. Das Projekt verwendet eine <a href="http://www.sqlite.org">SQLite</a> Datenbank und die <a href="http://www.codeproject.com/KB/aspnet/SQLite-Providers.aspx">SQLite Membership Provider</a> von <a href="http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=1173489">Roger Martin</a>.</p>
<p>Download des Beispielprojekts: <a href="http://www.herzam.com/blog/wp-content/uploads/2009/10/SecurityTrimming.zip">SecurityTrimming.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.herzam.com/blog/2009/10/14/security-trimming-mit-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
