swirl
Home Software Blog Wallpapers Webtools
ASP.NET MVC - Using checkboxes
Sunday 15, February 2015   |   Post link   |   Sample code  Download related material
One can't stop loving model binding in ASP.NET MVC. It simplifies so many things. There are some tricky areas though one of which is using checkboxes. In this post, I'll try to explain how I have used them.
Let's start with a simple example of a news-letter subscription. A user decides to subscribe or not subscribe for a news-letter subscription. A simple model class holds this information.

A simple selection screen allows the user to select or deselect this:

simple-selection.png
The view code (Choose.cshtml) is present below:

The controller (SubscriptionController.cs) code is present below:
Clicking the 'Submit' button takes the user to a the 'finalize' screen where we display his selection.

simple-selection-finalize.png
The view code (Finalize.cshtml) is present below:

MVC is able correctly map the boolean property 'Subscribe' of the model class with the result of selecting or not-selecting the check-box.
That was easy. Let's now change requirement a bit. Instead of just selecting whether he wants to subscribe or not, the user selects from a number of magazines the ones he wants to subscribe to. The new data model is:

The user starts the process from the ChooseMagazines view (ChooseMagazines.cshtml).

choose-magazines.png
The view code for this below:
The controller code for this action is:

GetMagazines would ideally be implemented in the service/business layer. When the user submits his selection, in the controller's action method we manipulate the data returned in the model a bit:

Since html controls store their value as string, we defined the SelectedMagazineIds property as a string enumeration. You could use a list or an array and it would work just as well. When the form is posted to the method, SelectedMagazineIds will contain integer IDs only for the checked check-boxes. The check-boxes which were not checked will contain the value "False". All we need to do it extract the valid integer ids which are the magazine-ids the user selected. We do that in the following lines:

We then retrieve the complete magazine objects based on these ids and pass them to the FinalizeMagazines view for display.

magazine-finalize.png
The code for the view (FinalizeMagazines.cshtml) is below:

To summarize, even though there is no native support for multiple checkboxes for the same data-memeber, it's not difficult to use checkboxes is such situations.
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)