Project DescriptionLightweight 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.
- vytvořit instanci formuláře
- 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