# Using Validation Controls

Spread for ASP.NET allows you prevent a user from entering invalid characters in a cell by using a validation controls in a spreadsheet cell.

## Content

You can prevent a user from entering invalid characters in a cell by using a validation control in the Spread cell. You can validate the data when pasting to a cell or cell range by setting the [NonEditModeValidation](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.FpSpread.NonEditModeValidation.html) property to True when using a validation control. Set the [AllowServerValidators](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.TextCellType.AllowServerValidators.html) property to True to support server validation using custom validator controls. You can also display an error message when the data is invalid with the [ValidationErrorMessage](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.FpSpread.ValidationErrorMessage.html) property.
Initialize the validation control and then add the validation control to the Spread cell to provide validation.
You can use validation controls instead of the standard validation by setting the [Validators](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.BaseCellType.Validators.html) property. The following cell types provide this option:

* [CurrencyCellType](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.CurrencyCellType.html)
* [DateTimeCellType](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.DateTimeCellType.html)
* [DoubleCellType](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.DoubleCellType.html)
* [GeneralCellType](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.GeneralCellType.html)
* [IntegerCellType](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.IntegerCellType.html)
* [PercentCellType](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.PercentCellType.html)
* [RegExpCellType](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.RegExpCellType.html)
* [TextCellType](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.TextCellType.html)

If the validation fails, the [onErrorMessageShown](/spreadnet/docs/latest/online-asp/overview/spweb-clientscriptref/clientscript-members/clientscript-allevents/CSSR-onErrorMessageShown) event occurs and the user cannot change the active cell.
The validation is not supported if the [ShowEditor](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.TextCellType.ShowEditor.html) property is true.

> !type=note
> **Note:** 
> If you receive an error such as, "UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'" in Visual Studio 2015, then you may need to add the following information to web.config.
>
> ```xml
> <appSettings>
> <add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
> </appSettings>
> ```

## Using Code

1. Add the validator code to the ASPX page.
2. Create the cell.
3. Create a validator.
4. Create validation messages.
5. Set the Validators property.

## Example

This example creates a cell and assigns a basic validator to the cell.

```xml
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="CompareValidator"></asp:CompareValidator>
<asp:RangeValidator ID="RangeValidator1" runat="server" ErrorMessage="RangeValidator"></asp:RangeValidator>
```

```csharp
protected void Page_Load(object sender, System.EventArgs e)
{
    if (IsPostBack) return;
    FpSpread1.Sheets[0].RowCount = 10;
    FpSpread1.Sheets[0].ColumnCount = 7;
    // RequiredFieldValidator, from code
    FarPoint.Web.Spread.TextCellType txt1 = new FarPoint.Web.Spread.TextCellType();
    RequiredFieldValidator rfv = new RequiredFieldValidator();
    rfv.ErrorMessage = "RequiredFieldValidator, from code: value required!";
    txt1.Validators.Add(rfv);
    FpSpread1.ActiveSheetView.Cells[0, 0].Text = "RequiredFieldValidator, from code";
    FpSpread1.ActiveSheetView.Cells[0, 1].CellType = txt1;

    // RequiredFieldValidator, from toolbox
    FarPoint.Web.Spread.TextCellType txt2 = new FarPoint.Web.Spread.TextCellType();
    RequiredFieldValidator1.ErrorMessage = "RequiredFieldValidator, from toolbox: value required!";
    txt2.Validators.Add(RequiredFieldValidator1);
    FpSpread1.ActiveSheetView.Cells[1, 0].Text = "RequiredFieldValidator, from toolbox";
    FpSpread1.ActiveSheetView.Cells[1, 1].CellType = txt2;

    // CompareValidator, from toolbox
    FarPoint.Web.Spread.TextCellType txt3 = new FarPoint.Web.Spread.TextCellType();
    CompareValidator1.ErrorMessage = "CompareValidator, from toolbox: password does not match! Enter \"Spread\"";
    CompareValidator1.ValueToCompare = "Spread";
    txt3.Validators.Add(CompareValidator1);
    FpSpread1.ActiveSheetView.Cells[2, 0].Text = "CompareValidator, from toolbox";
    FpSpread1.ActiveSheetView.Cells[2, 1].CellType = txt3;

    // CompareValidator, from code
    FarPoint.Web.Spread.TextCellType txt4 = new FarPoint.Web.Spread.TextCellType();
    CompareValidator cv = new CompareValidator();
    cv.ErrorMessage = "CompareValidator, from toolbox: password does not match! Enter \"Spread\"";
    cv.ValueToCompare = "Spread";
    txt4.Validators.Add(cv);
    FpSpread1.ActiveSheetView.Cells[3, 0].Text = "CompareValidator, from code";
    FpSpread1.ActiveSheetView.Cells[3, 1].CellType = txt4;

    // RangeValidator, from toolbox
    FarPoint.Web.Spread.TextCellType txt5 = new FarPoint.Web.Spread.TextCellType();
    RangeValidator1.ErrorMessage = "RangeValidator, from toolbox: value should in range [10 - 15]";
    RangeValidator1.MinimumValue = "10"; RangeValidator1.MaximumValue = "15";
    RangeValidator1.Type = ValidationDataType.Integer;
    txt5.Validators.Add(RangeValidator1);
    FpSpread1.ActiveSheetView.Cells[4, 0].Text = "RangeValidator, from toolbox";
    FpSpread1.ActiveSheetView.Cells[4, 1].CellType = txt5;

    // RangeValidator, from code
    FarPoint.Web.Spread.TextCellType txt6 = new FarPoint.Web.Spread.TextCellType();
    RangeValidator rv = new RangeValidator();
    rv.ErrorMessage = "RangeValidator, from toolbox: value should in range [10 - 15]";
    rv.MinimumValue = "10"; rv.MaximumValue = "15";
    rv.Type = ValidationDataType.Integer;
    txt6.Validators.Add(rv);
    FpSpread1.ActiveSheetView.Cells[5, 0].Text = "RangeValidator, from toolbox";
    FpSpread1.ActiveSheetView.Cells[5, 1].CellType = txt6;
}
```

```vbnet
Protected Sub Page_Load(sender As Object, e As System.EventArgs)
    If IsPostBack Then
        Return
    End If
    FpSpread1.Sheets(0).RowCount = 10
    FpSpread1.Sheets(0).ColumnCount = 7
    ' RequiredFieldValidator, from code
    Dim txt1 As New FarPoint.Web.Spread.TextCellType()
    Dim rfv As New RequiredFieldValidator()
    rfv.ErrorMessage = "RequiredFieldValidator, from code: value required!"
    txt1.Validators.Add(rfv)
    FpSpread1.ActiveSheetView.Cells(0, 0).Text = "RequiredFieldValidator, from code"
    FpSpread1.ActiveSheetView.Cells(0, 1).CellType = txt1

    ' RequiredFieldValidator, from toolbox
    Dim txt2 As New FarPoint.Web.Spread.TextCellType()
    RequiredFieldValidator1.ErrorMessage = "RequiredFieldValidator, from toolbox: value required!"
    txt2.Validators.Add(RequiredFieldValidator1)
    FpSpread1.ActiveSheetView.Cells(1, 0).Text = "RequiredFieldValidator, from toolbox"
    FpSpread1.ActiveSheetView.Cells(1, 1).CellType = txt2

    ' CompareValidator, from toolbox
    Dim txt3 As New FarPoint.Web.Spread.TextCellType()
    CompareValidator1.ErrorMessage = "CompareValidator, from toolbox: password does not match! Enter ""Spread"""
    CompareValidator1.ValueToCompare = "Spread"
    txt3.Validators.Add(CompareValidator1)
    FpSpread1.ActiveSheetView.Cells(2, 0).Text = "CompareValidator, from toolbox"
    FpSpread1.ActiveSheetView.Cells(2, 1).CellType = txt3

    ' CompareValidator, from code
    Dim txt4 As New FarPoint.Web.Spread.TextCellType()
    Dim cv As New CompareValidator()
    cv.ErrorMessage = "CompareValidator, from toolbox: password does not match! Enter ""Spread"""
    cv.ValueToCompare = "Spread"
    txt4.Validators.Add(cv)
    FpSpread1.ActiveSheetView.Cells(3, 0).Text = "CompareValidator, from code"
    FpSpread1.ActiveSheetView.Cells(3, 1).CellType = txt4

    ' RangeValidator, from toolbox
    Dim txt5 As New FarPoint.Web.Spread.TextCellType()
    RangeValidator1.ErrorMessage = "RangeValidator, from toolbox: value should in range [10 - 15]"
    RangeValidator1.MinimumValue = "10"
    RangeValidator1.MaximumValue = "15"
    RangeValidator1.Type = ValidationDataType.[Integer]
    txt5.Validators.Add(RangeValidator1)
    FpSpread1.ActiveSheetView.Cells(4, 0).Text = "RangeValidator, from toolbox"
    FpSpread1.ActiveSheetView.Cells(4, 1).CellType = txt5

    ' RangeValidator, from code
    Dim txt6 As New FarPoint.Web.Spread.TextCellType()
    Dim rv As New RangeValidator()
    rv.ErrorMessage = "RangeValidator, from toolbox: value should in range [10 - 15]"
    rv.MinimumValue = "10"
    rv.MaximumValue = "15"
    rv.Type = ValidationDataType.[Integer]
    txt6.Validators.Add(rv)
    FpSpread1.ActiveSheetView.Cells(5, 0).Text = "RangeValidator, from toolbox"
    FpSpread1.ActiveSheetView.Cells(5, 1).CellType = txt6
End Sub
```

This example supports server validation using a custom validator control.

```xml
<FarPoint:FpSpread ID="FpSpread1" runat="server" BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" Height="200" Width="400">
   <commandbar backcolor="Control" buttonfacecolor="Control" buttonhighlightcolor="ControlLightLight" buttonshadowcolor="ControlDark"></commandbar>
   <sheets>
      <FarPoint:SheetView SheetName="Sheet1"></FarPoint:SheetView>
   </sheets>
</FarPoint:FpSpread>
      
<asp:CustomValidator ID="CustomValidator2" runat="server" ErrorMessage="Error of server side" OnServerValidate="CustomValidator2_ServerValidate"></asp:CustomValidator>
```

```csharp
protected void Page_Load(object sender, EventArgs e)
{
  if (IsPostBack) return;
  TextCellType txt = new FarPoint.Web.Spread.TextCellType();
  txt.AllowServerValidators = true;// New property to enable server validating with validator controls
  txt.Validators.Add(CustomValidator2);
  FpSpread1.ActiveSheetView.Cells[1, 1].CellType = txt;
  FpSpread1.ActiveSheetView.Cells[1, 1].BackColor = Color.LightPink;
}
protected void CustomValidator2_ServerValidate(object source, ServerValidateEventArgs args)
{
int value = 0;
args.IsValid = int.TryParse(args.Value, out value) && value < 10;// Accept integer number less than 10;
}
```

```vbnet
Protected Sub Page_Load(sender As Object, e As System.EventArgs)
        If IsPostBack Then
         Return
               
Dim txt As New FarPoint.Web.Spread.TextCellType()
  txt.AllowServerValidators = True 'New property to enable server validating with validator controls
  txt.Validators.Add(CustomValidator2)
  FpSpread1.ActiveSheetView.Cells(1, 1).CellType = txt
  FpSpread1.ActiveSheetView.Cells(1, 1).BackColor = Color.LightPink
End Sub
Protected Sub CustomValidator2_ServerValidate(source As Object, args As ServerValidateEventArgs)
 Dim value As Integer = 0
 args.IsValid = Integer.TryParse(args.Value, value) AndAlso value < 10  'Accept integer number less than 10
End Sub
```

## See Also

[Scripting Members](/spreadnet/docs/latest/online-asp/overview/spweb-clientscriptref/clientscript-members)
[ValidationErrorMessage Property](/spreadnet/api/latest/online-asp/FarPoint.Web.Spread/FarPoint.Web.Spread.FpSpread.ValidationErrorMessage.html)