swirl
Home Software Blog Wallpapers Webtools
ASP.NET MVC5 - Validating user input
Monday 16, February 2015   |   Post link   |   Sample code  Download related material
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 material


Comments

Posts By Year

2024 (4)
2023 (5)
2022 (10)
2021 (5)
2020 (12)
2019 (6)
2018 (8)
2017 (11)
2016 (6)
2015 (17)
2014 (2)
2013 (4)
2012 (2)

Posts By Category

.NET (4)
.NET Core (2)
ASP.NET MVC (4)
AWS (5)
AWS API Gateway (1)
Android (1)
Apache Camel (1)
Architecture (1)
Audio (1)
Azure (2)
Book review (3)
Business (1)
C# (3)
C++ (2)
CloudHSM (1)
Containers (4)
Corporate culture (1)
Database (3)
Database migration (1)
Desktop (1)
Docker (1)
DotNet (3)
DotNet Core (2)
ElasticSearch (1)
Entity Framework (3)
Git (3)
IIS (1)
JDBC (1)
Java (10)
Kibana (1)
Kubernetes (1)
Lambda (1)
Learning (1)
Life (7)
Linux (2)
Lucene (1)
Multi-threading (1)
Music (1)
OData (1)
Office (1)
PHP (1)
Photography (1)
PowerShell (2)
Programming (28)
Python (1)
Rants (5)
SQL (2)
SQL Server (1)
Security (3)
Software (1)
Software Engineering (1)
Software development (2)
Solr (1)
Sql Server (2)
Storage (1)
T-SQL (1)
TDD (1)
TSQL (5)
Tablet (1)
Technology (1)
Test Driven (1)
Testing (1)
Tomcat (1)
Unit Testing (1)
Unit Tests (1)
Utilities (3)
VC++ (1)
VMWare (1)
VSCode (1)
Visual Studio (2)
Wallpapers (1)
Web API (2)
Win32 (1)
Windows (9)
XML (2)

Posts By Tags

.NET(6) API Gateway(1) ASP.NET(4) AWS(3) Adults(1) Advertising(1) Android(1) Anti-forgery(1) Asynch(1) Authentication(2) Azure(2) Backup(1) Beliefs(1) BlockingQueue(1) Book review(2) Books(1) Busy(1) C#(4) C++(3) CLR(1) CORS(1) CSRF(1) CTE(1) Callbacks(1) Camel(1) Certificates(1) Checkbox(1) Client authentication(1) CloudHSM(1) Cmdlet(1) Company culture(1) Complexity(1) Consumer(1) Consumerism(1) Containers(3) Core(2) Custom(2) DPI(1) Data-time(1) Database(4) Debugging(1) Delegates(1) Developer(2) Dockers(2) DotNetCore(3) EF 1.0(1) Earphones(1) Elastic Search(2) ElasticSearch(1) Encrypted(1) Entity framework(1) Events(1) File copy(1) File history(1) Font(1) Git(2) HierarchyID(1) Hyper-V(1) IIS(1) Installing(1) Intelli J(1) JDBC(1) JSON(1) JUnit(1) JWT(1) Java(3) JavaScript(1) Kubernetes(1) Life(1) LinkedIn(1) Linux(2) Localization(1) Log4J(1) Log4J2(1) Logging(1) Lucene(1) MVC(4) Management(2) Migration history(1) Mirror(1) Mobile Apps(1) Modern Life(1) Money(1) Music(1) NGINX(1) NTFS(1) NUnit(2) OData(1) OPENXML(1) Objects(1) Office(1) OpenCover(1) Organization(1) PHP(1) Paths(1) PowerShell(2) Processes(1) Producer(1) Programming(2) Python(2) QAAC(1) Quality(1) REDIS(2) REST(1) Runtimes(1) S3-Select(1) SD card(1) SLF4J(1) SQL(2) SQL Code-first Migration(1) SSH(2) SSL(1) Sattelite assemblies(1) School(1) Secrets Manager(1) Self reliance(1) Service(1) Shell(1) Solr(1) Sony VAIO(1) Spirituality(1) Spring(1) Sql Express(1) System Image(1) TDD(1) TSQL(3) Table variables(1) Tables(1) Tablet(1) Ubuntu(1) Url rewrite(1) VMWare(1) VSCode(1) Validation(2) VeraCode(1) Wallpaper(1) Wallpapers(1) Web Development(4) Windows(2) Windows 10(2) Windows 2016(2) Windows 8.1(1) Work culture(1) XML(1) Yii(1) iTunes(1) open file handles(1) renew(1) security(1) static ip address(1) ulimit(1)