swirl
Home Software Blog Wallpapers Webtools
ASP.NET MVC5 - Validating user input
Monday 16, February 2015   |   Post link   |   Sample code  Download related meterial
ASP.NET MVC5 has great support for input validation. There are two main approaches to setting up validation:
  • Validation attributes
  • Implementing IValidatableObject interface on model
The post uses validation attributes for validation. Adding the validation support starts right from the data definition - which is the model. Let's consider the example of a user registration where the user needs to enter his user-id (email address) and a password.

The validation requirements are:
  • Email address should not be empty
  • Email address should have a valid email address format
  • Password should be greater than 5 and less than 10 characters

The flow: The user is first taken to /Home/StartRegistration url where he enters the email-id and password. On clicking submit, the action /Home/CompleteRegister fires. if the validation succeeds the user continue to the CompleteRegistration view. If the validation fails he is redirected to Home/StartRegistration where the validation error messages are displayed. As of now, we are only using server-side validation.

First let's define the registration model class:

Let's create a view (StartRegistration.cshtml):

Note: the CSS classes are the ones provided out of the box by Visual Studio.NET. You can define you own CSS class if you like.
The relevant HomeController methods are:
Start the application and try out a few values.
If the validation fails, we see:

server-validation-fail.png

If the validation succeeds, we see:

server-validation-success.png

The important point to note is that the error messages are evaluated when the user clicks the 'Submit' button. If the validation fails in the CompleteRegistration method, we pass back the Registration object to StartRegistration so that it can use that object to display the errors.

Client-side validation
That was about the server side of validation. We can enable client side validation so that the validation logic can fire within the browser using JavaScript thus saving us a round-trip to the server and avoid a page reload. Let's enable this.

Firstly, we need to include JQuery validation script. If you used Visual Studio to generate the project, the bundle is already registered in the App_Start\BundleConfig.cs file:
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( "~/Scripts/jquery.validate*"));
Add the following lines to the StartRegistration.cshtml file right at the end: Also, ensure client-side validation is enabled in the Web.config file:
Start the application and navigate to Home/StartRegistration. When you enter a valid email address and tab-out of the email-id textbox, you'll notice the error disappearing - this is because of client side validation doing its stuff.

client-validation-working.png

Download the source code here
Sample code  Download related meterial


Load Comments

Posts By Year

2016 (6)
2017 (5)
2012 (2)
2013 (4)
2014 (2)
2015 (18)

Posts By Category

Software Engineering (1)
IIS (1)
T-SQL (1)
Git (1)
Technology (1)
Database migration (1)
PHP (1)
Corporate culture (1)
Tablet (1)
OData (1)
Containers (3)
Lucene (1)
Test Driven (1)
Java (2)
TDD (1)
Solr (1)
XML (1)
TSQL (5)
Windows (4)
PowerShell (1)
Software development (1)
Wallpapers (1)
Utilities (1)
Entity Framework (2)
Rants (5)
Life (5)
Programming (13)
Office (1)
Book review (3)
Sql Server (1)
ASP.NET MVC (4)
Android (1)
Desktop (1)
Unit Testing (1)

Posts By Tags

Dockers(2) Books(1) Organization(1) Busy(1) PowerShell(1) PHP(1) Backup(1) Database(1) Containers(3) Mobile Apps(1) Paths(1) SSH(1) Web Development(4) Yii(1) Debugging(1) Advertising(1) Adults(1) GradleApache(1) C#(2) SQL Code-first Migration(1) Developer(1) Consumerism(1) Log4J(1) Self reliance(1) Company culture(1) Entity framework(1) Work culture(1) Programming(1) Management(2) Book review(2) Validation(2) C++(1) Sql Express(1) HierarchyID(1) Lucene(1) IIS(1) Windows 10(1) Cmdlet(1) Intelli J(1) JavaScript(1) Spirituality(1) Migration history(1) Tablet(1) OData(1) TDD(1) Data-time(1) Beliefs(1) Checkbox(1) CTE(1) CSRF(1) JSON(1) Windows 8.1(1) Quality(1) XML(1) ASP.NET(4) TSQL(3) File history(1) Windows(1) Wallpapers(1) SD card(1) File copy(1) SQL(1) Windows 2016(2) Python(1) MVC(4) Url rewrite(1) Solr(1) Modern Life(1) System Image(1) Android(1) Commons(1) Office(1) Anti-forgery(1)