Walidacja po stronie serwera z wykorzystaniem kontrolek CustomValidator oraz ValidationCalloutExtender
Podczas tworzenia reguł walidacji w aplikacji webowej, może się zdarzyć, że standardowe Validatory nie wystarczają, aby zapewnić w pełni funcjonalną walidację. Typowym przykałdem jest sprawdzenie czy czy login już istnieje w bazie. Zwłaszcza, jeśli budujemy aplikację Ajax, która z definicji ma działać bez przeładowania strony. Z pomocą przychodzi. kontrolki CustomValidator oraz validatorCalloutExtender. Aby to osiągnąć wykonujemy następujące czynności.
Dodajemy rządne Pole tekstowe i validator do strony. Całość otaczamy update panelem:
<asp:scriptmanager id="ScriptManager1" runat="server">
<asp:updatepanel id="UpdatePanel1" runat="server">
<contenttemplate>
<asp:textbox id="TextBox1" runat="server">
<asp:button id="Button1" runat="server" text="Button" onclick="Button1_Click">
<asp:customvalidator id="CustomValidator1" controltovalidate="TextBox1" display="None" runat="server" errormessage="
This is the text in your Validator Callout Extender error.
"
ClientValidationFunction="ValidateTextBox" />
<cc1:validatorcalloutextender id="ValidatorCalloutExtender1" targetcontrolid="CustomValidator1" runat="server">
</cc1:validatorcalloutextender>
</asp:customvalidator>
Następnie tworzymy skrypt walidacyjny :
var resultOfTheCallBack;
function ValidateTextBox(sender, args)
{
var textBoxValue = document.getElementById('TextBox1').value;
// call server callback method passing the value in your textbox
YourCallBackMethod(textBoxValue);
if(resultOfTheCallBack == 'Valid')
args.IsValid = true;
else
args.IsValid = false;
}
W Evencie Page Load dodajemy kod generujący metodę javascript obsługującą przetwarzanie wa
string callBackReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "CallBackEventReference", "context");
string yourCallBackScript = "function YourCallBackMethod(arg, context) { " + callBackReference + "; }";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "YourCallBackMethod", yourCallBackScript, true);
Na Końcu implementujemy interfejs ICallbackEventHandler
// ICallbackEventHandler Members
public string GetCallbackResult()
{
return _callBackStatus;
}
public void RaiseCallbackEvent(string eventArgument)
{
// TUTAJ WSTAW KOD WALIDACYJNY
if (eventArgument == "junnark")
_callBackStatus = "Valid";
}
To wszystko! .
Najważniejszą metodą jest GetCallbackResult() która przesyła wynik przetwarzania z powrotem do klienckiej metody zdefiniowanej w Page Load.