Miesiąc: Kwiecień 2010

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.