This project is read-only.
Project Description
Lightweight framework for creating and validating web forms without WebForms.


NForms je knihovna pro tvorbu formulářů na platformě ASP.NET bez použití WebForms. Výhody takového přístupu jsou:
  • Možnost umístit více formulářů do stránky.
  • Znovupoužitelnost formuláře.
  • Žádný postback.
  • Snadné šablonování a kód pod kontrolou.

NForm jsou přímo inspirovány formuláři z PHP frameworku Nette a trochu i New Forms z django.

Definice formuláře

Pro definování formuláře stačí napsat pár řádků kódu.
  1. vytvořit instanci formuláře
  2. přidat jednotlivé prvky a nastavit jejich vlastnosti

using Rarous.NForms;

public class FormPage : System.Web.UI.Page {

  protected Form MyForm { get; private set; };

  protected void Page_Load(object sender, EventArgs e) {
    MyForm  = new Form();
    MyForm.AddText("name", "Jméno:", 20, 50);
    MyForm.AddText("email", "E-mail", 20, 255);
    MyForm.AddHidden("skryte").SetValue("nějaká hodnota - skrytá");
    MyForm.AddRadio("pohlavi", "Pohlaví:", genres);
    MyForm.AddButton("submit", "Odeslat");
  }

}

V šabloně se pak pužije následovně:

<form method="post" action="">
<div style="display:none"><%=Form["skryte"].Control %></div>
<fieldset>
  <legend>Osobní údaje</legend>
<table>
<tr>
  <td><%=Form["name"].Label %></td>
  <td><%=Form["name"].Control %></td>
</tr>
<tr>
  <td><%=Form["email"].Label %></td>
  <td><%=Form["email"].Control %></td>
</tr>
<tr>
  <td><%=Form["pohlavi"].Label %></td>
  <td><%=Form["pohlavi"].Control %></td>
</tr>
<tr>
  <td></td>
  <td><%=Form["submit"].Control %></td>
</tr>
</table>
</fieldset>
</form>

Pokud chceme využít všech možností, které NForms nabízejí, je nutné podědit z třídy formuláře:

using Rarous.NForms;
using Rarous.NForms.Validation;

public class CommentsForm : Form {
  public const string ArticleUrl = "comment_article_url";
  public const string ArticleId = "comment_article_id";
  public const string Validity = "comment_validity";
  public const string Text = "comment_text";
  public const string UserName = "comment_user_name";
  public const string UserEmail = "comment_user_email";
  public const string UserWeb = "comment_user_web";
  public const string UserAnswer = "comment_user_answer";
  public const string Submit = "comment_submit";

  public CommentsForm()
    : this(null) {
  }

  public CommentsForm(NameValueCollection data)
    : this(data, null) {
  }

  public CommentsForm(NameValueCollection data, List<string> messages)
    : base(data, messages) {
    CreateForm(); // vytvoříme formulářove prvky
    BindData();   // svážeme formulářové prvky s daty z requestu
  }

  private void CreateForm() {
    AddHidden(ArticleUrl);
    AddHidden(ArticleId);
    AddHidden(Validity);

    AddTextArea(Text, "Text komentáře:", 10, 55).
      Required("Text příspěvku je povinný.");
    AddText(UserName, "Jméno:").
      Required("Jméno je povinné.");
    AddText(UserEmail, "E-mail:").
      SetEmptyValue("@");
    AddText(UserWeb, "Web:").
      SetEmptyValue("http://");

    AddText(UserAnswer, "Odpověď je pivo:").
      AddRule("Zadejte pivo.", s => String.Compare("pivo", s, true) == 0);

    AddSubmit(Submit, "Přidat komentář");
  }
}

Tímto získáme znovupoužitelný formulář, který je schopný načítat data z requestu, validovat je a zobrazovat validační sumář.

Validační pravidla

NForms jsou vybaveny jednoduchým, ale silným mechanismem validace. Základem jsou predikáty.

var form = new Form();

form.AddText("name", "Jméno:").
  AddRule(x => x.Length > 3, "Jméno je příliš krátké.");

Pomocí predikátů lze vytvářet spoustu zajímavých pravidel. Pokud by však jejich možnosti nestačily. Dají se snadno validační pravidla rozšířit o vlastní. Stačí podědit z abstraktní třídy '''!ValidationRule''' nebo generické abstraktní třídy '''!ValidationRule<T>'''.

Bližší informace

Last edited Jun 2, 2009 at 10:26 AM by rarous, version 8