Simple asp.net MVC Controls

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.

3 Comments

  • Tomáš Jecha said

    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.

  • Jarda Jirava said

    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ší.

  • Tomáš Jecha said

    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í.

Add a Comment