Před pár minutami se mi povedlo uveřejnit na serveru CodePlex.com první alpha release verzi asp.net MVC prvků.
Fieldset
V tomto úvodním release je zahrnut pouze prvek Fieldset, který je inspirován prvekem Grid z projektu MVCContrib. Tento prvek jsem původně vytvořil pro webové stránky zpracovávané v soutěži na serveru vbnet.cz. Ona myšlenka takovéhoto prvku, který zabezpečí jednotný vzhled a ucelený přístup k tvorbě formulářů na web stránkách, se mi zalíbil a proto jsem jej rozvedl a maličko vylepšil.
Již nyní mám v hlavě další vylepšení a možný rozvoj. Jsem však přesvědčen, že je takovýto prvek lepší publikovat co nejdříve a inspirovat se názory komunity. Budu proto rád, pokud mi napíšete možná vylepšení nebo připomínky.
Proč simple
V čem by měl být smysl takto vytvořeného prvku před samostatným tvořením vstupního formuláře? Prvním impulzem, k tvotbě tohoto ovládacího prvku pro mě bylo neustálé zapisování HTML kódu, který se pro každý prvek formuláře opakoval. Dalším podnětem pak byla náchylnost k chybám při zápisu. S release verzí asp.net MVC Beta přibyla možnost validací prvků, avšak pro tyto prvky bylo třeba uvést shodný název, jaký je uveden v tzv. ModelState. Vznikla tak potřeba pro každý validovaný prvek tento název zapsat dvakrát, což už vede k možným chybám.
Z těchto důvodů jsem se rozhodl vytvořit takovou formu zápisu, která by vývojáře odstínila od těchto potřeb a nabídla mu přímou a jednoduchou cestu k cíli. Ukázku možného zápisu jsem prezentoval na oficiálních stránkách simple asp.net MVC Controls.
Doufám, že se mi cíl vytvoření jednoduchých prvků pro asp.net MVC podařil a bude na čem stavět pro další verze.

Dobrý den, simple asp.net MVC Controls se mi líbí, super nápad, hodně to ulehčí práci. Díky. Jsem asi hnidopich, ale neodpustím si jednu drobnost drobnost. V kódu: FieldSet.cs | RenderCaption() neencodujete renderovaný nadpis.
06.12.2008 10:07
Ahoj, díky za povzbuzení. Co se týká encodování, toto jsem nechtěl dělat a to z jednoduchého důvodu, pokud je třeba, může to vývojář udělat rovnou v deklaraci fieldsetu. Pokud by to bylo prováděno, musel bych zpřístupnit jednoduchou formou možnost vypnutí této volby. Obdobně by se asi mohlo postupovat při zpracování headeru u jednotlivých položek. Je tedy otázkou, který přístup bude vhodnější.
08.12.2008 10:14
To je pravda. Přeci jenom header může být i běžný Html kód. Komponentu dál používám, je bezva, ale stejně bych měl ještě jeden návrh na úpravu. Co takhle možnost použít vlastní třídu odvozenou od fieldsetu? Použil bych to v případě, že mi nevyhovuje rozložení, které feildset generuje. Já osobně bych udělal něco jako IDataForm, který by měl: void Render(string caption, FieldsetBuilder items, TextWriter writer, HtmlHelper helper) A pak by stačilo jen rozšířit FieldsetExtensions o extension metodu: public static void Fieldset(this HtmlHelper helper, string caption, Action items) where T : IDataForm, new() { T dataForm = new T(); dataForm.Render(caption, createDataFormItemBuilder(items), helper.ViewContext.HttpContext.Response.Output, helper); } Co vy na to? Programátor si pak může plně ovlivnit způsob generování.
21.12.2008 18:17