reCAPTCHA : Free Captcha service for ASP.NET

Its a common requirement that we require a captcha to be integrated on our page. I would like to mention a free captcha service which can be implemented in integrated on websites.

What is reCaptcha?

  1. reCAPTCHA is a free CAPTCHA service that helps to digitize books, newspapers and old time radio shows.
  2. It’s Free! Yep, reCAPTCHA is free.
  3. It’s Easy. reCAPTCHA is a Web service. As such, adopting it is as simple as adding
    a few lines of code on your site.
  4. It’s Accessible. reCAPTCHA has an audio test that allows blind people to freely
    navigate your site.
  5. It’s Secure. Most other CAPTCHA implementations can be easily broken.
  6. It’s Popular. Over 100,000 sites use reCAPTCHA, including household names like Facebook, Ticketmaster, and Craigslist.
  7. Whenever uses input data in reCaptcha control, they actually help digitizing books.

Moreover is very easy to integrate reCaptcha in our websites. Below are the steps
which are required to integrate it into a ASP.NET page.

Steps to Integrate reCaptcha in ASP.NET

  1. Register for a reCaptcha key : As a first step we need to register for recaptcha keys. Navigate to Get reCaptcha URL to signup for the keys. After we register for the keys, we get a public and private keys which we need to use in our page. By default all keys work on localhost as well.
  2. Download reCaptcha library for ASP.NET: Download the dll file from here. Also add the reference to the dll in the project.
  3. Add reCaptcha widget on ASP.NET page : Insert the reCAPTCHA control into the form you wish to protect by adding the following code snippets:
    • At the top of the aspx page, insert this:
      <%@ register
                      tagprefix="recaptcha" namespace="Recaptcha" assembly="Recaptcha" %>
    • Then insert the reCAPTCHA control inside of the form tag:
                      <recaptcha:recaptchacontrol id="recaptcha" runat="server" publickey="your_public_key"
                          privatekey="your_private_key" />
  4. Make sure you use ASP.NET validation to validate your form (you should check Page.IsValid on submission).

As an example I created a ASP.NET page whose markup and code behind code looks as given below:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RecaptchaPage.aspx.cs" Inherits="ContosoUniversity.RecaptchaPage" %>
<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">

<html xmlns="">
<head runat="server">
    <form id="form1" runat="server">
     <asp:Label Visible="true" ID="lblResult" runat="server" />


          <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />



    public partial class RecaptchaPage : System.Web.UI.Page
        protected void Page_Load(object sender, EventArgs e)


        protected void btnSubmit_Click(object sender, EventArgs e)
            if (Page.IsValid) 
              lblResult.Text = "Captcha sucessfull!";
              lblResult.ForeColor = System.Drawing.Color.Green;
              lblResult.Text = "Incorrect";
              lblResult.ForeColor = System.Drawing.Color.Red;

When I entered correct captcha text and pressed submit button following was the output:

When I entered incorrect captcha text and pressed submit button following was the output:

kick it on

Shout it

Introduction to JSON (Javascript Object Notation)

What is JSON?
JSON (Javascript Object Notation) is a light weight data interchange format. JSON is a subset of the literal object notation in JavaScript. It can be compared to XML but parsing of JSON is very much easier than XML data. It is a text format of data and is programming language independent. In fact it very much looks like unnamed array.

Example of data in JSON
Shown below is a object declared in JSON format.

var individual = {
     "firstName": "Anky",
     "lastName": "Singh",
     "address": {
                       "streetAddress": "4th Avenue",
                       "city": "Moorpark",
                       "state": "CA",
                       "postalCode": 34523
     "phoneNumbers": [
                                 "212 555-1234",
                                 "646 555-4567"

alert("The name of Individual is " + individual.firstName + " " +  individual.lastName);
alert("The Street Address is " + individual.address.streetAddress);
alert("The Postal code is " + individual.address.postalCode);
alert("First Phone Number  is " + individual.phoneNumbers[0]);
alert("Second Phone Number  is " + individual.phoneNumbers[1]);

<em>Output would be alert windows with following messages</em>:
The name of Individual is Anky Singh
The Street Address is 4th Avenue
The Postal code is 34523
First Phone Number  is 212 555-1234
Second Phone Number  is 646 555-4567

Above code shows how an Individual object is declared using JSON. Alert statements provide an example how the properties of the object can be accessed in the same way as we do in C# or Java.

Being subset of literal notation JSON standard has got stricter rules. See or RFC 4627 for a more formal description of the standard.

But all said simplicity of JSON data is the specialty of the standard.

kick it on

ASP.NET 4.0 – Persisting Row Selection in Data Controls

Problem Statement
In older versions of ASP.NET, When we select any row in a GridView or ListView controls, the selection is based on the row index of the page. For example, If we select row no 3 on page 1 and then move to page 2, we will see row no 3 again selected on page 2. which is undesirable.

ASP.NET 4.0 introduces the feature of Persisted Selection. When this feature is enabled, the selected item is based on the row datakey and not row index. For example, in a Grid showing products, i can specify that DataKey for my products is “ISBN”. Hence the rows will now be selected on the basis of ISBN(i.e. Datakey). Which further means that if i select row no 3 in products grid on page 1 and then move to page 2, no row will be selected. But if i again go back to page 1, row 3 will still be selected.

Feature can be enabled/disabled by setting the property EnablePersistedSelection. Also the property DataKeyNames be specified so that DataKey is set for the rows.

References: MSDN

kick it on

Shout it