1 person following this project (follow)

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 9:26 AM by rarous, version 8