Vlastní validátor v ASP.NET
- 27. Říjen 2009
- Publikováno v ASP.NET
- Napište komentář
Na jednoduchém příkladu si ukážeme jak si v ASP.NET vytvořit vlastní validátor, který bude obsahovat jak validaci na serveru tak i validaci u klienta pomocí JavaScriptu.
Ukázkový validátor bude ověřovat zda zadaný řetězec má předepsanou délku.
Začneme tím, že si vytvoříme novou Class Library, kterou si pojmenujeme ValidatorLibrary. V této Class Library si vytvoříme třídu MyValidator. Abychom tuto třídu mohli podědit od CustomValidator, přidáme si do projektu referenci na assembly System.Web.
Naší třídě přidáme public property PocetZnaku, ve které budeme udržovat počet znaků, na který bude validátor ověřovat vstup. Kdybychom hodnotu ukládali pouze v proměnné a pokusili se ji programově změnit, tak by se nám při odeslání formuláře znovu nastavila na výchozí hodnotu property, zadanou při návrhu stránky. Aby hodnota property PocetZnaku vydrzela i odeslání formuláře musíme tedy pro její zapamatování použít například ViewState.
{
set
{
ViewState["pocetZnaku"] = value;
}
get
{
object o = ViewState["pocetZnaku"];
return (o == null) ? 1 : (int)o;
}
}
Serverovou validaci vyřešíme překrytím metody EvaluateIsValid().
{
string validovanaHodnota = GetControlValidationValue(ControlToValidate);
if (validovanaHodnota.Length == PocetZnaku)
return true;
else
return false;
}
Validaci u klienta v prohlížeči provedeme pomocí JavaScriptu, který se společně s validátorem vloží do stránky. Abychom do JavaScriptu dostali hodnotu property PocetZnaku, zavoláme funkci RegisterExpandoAttribute, která k objektu validátoru ve stránce (díky this.ClientID) přiřadí atribut pocetZnaku a nastaví mu odpovídající hodnotu.
{
ClientValidationFunction = "validacniFunkce";
String validacniFunkce = @"<script type=""text/javascript"">
<!--
function validacniFunkce(sender, args) {
if (args.Value.length == sender.pocetZnaku)
args.IsValid = true;
else
args.IsValid = false;
}
//-->
</script>";
//zaregistrujeme JavaScript do stránky
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "validacniFunkce", validacniFunkce);
//přidáme počet znaků jako atribut k validátoru
Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "pocetZnaku", PocetZnaku.ToString());
//zavoláme metodu předka
base.OnInit(e);
}
Nyní už můžeme validátor zkompilovat a ve website (nebo webovém projektu) na něj přidat referenci. Pak už by měl být validátor vidět v Toolboxu Visual Studia. Pokud tam není, mělo by pomoct přepnutí do design módu. Pak už jej můžeme směle využít na stránce, stejně tak, jako ostatní validátory.
A ještě jednou celá třída pohromadě
using System.Web.UI.WebControls;
namespace ValidatorLibrary
{
public class MyValidator : CustomValidator
{
public int PocetZnaku
{
set
{
ViewState["pocetZnaku"] = value;
}
get
{
object o = ViewState["pocetZnaku"];
return (o == null) ? 1 : (int)o;
}
}
protected override void OnInit(EventArgs e)
{
ClientValidationFunction = "validacniFunkce";
String validacniFunkce = @"<script type=""text/javascript"">
<!--
function validacniFunkce(sender, args) {
if (args.Value.Length == sender.pocetZnaku)
args.IsValid = true;
else
args.IsValid = false;
}
//-->
</script>";
//zaregistrujeme JavaScript do stránky
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "validacniFunkce", validacniFunkce);
//přidáme počet znaků jako atribut k validátoru
Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "pocetZnaku", PocetZnaku.ToString());
//zavoláme metodu předka
base.OnInit(e);
}
protected override bool EvaluateIsValid()
{
string validovanaHodnota = GetControlValidationValue(ControlToValidate);
if (validovanaHodnota.length == PocetZnaku)
return true;
else
return false;
}
}
}
Dosud žádný komentář.