How To Make A Budgeting App In C# With Blazor

Dev LeaderDev Leader
8 min read

In this article, we will explore how to make a budgeting app in C# with ASP.NET Core Blazor. Whether you are new to software development or an experienced software engineer looking to expand your knowledge, this article will provide valuable insights and practical examples.

Creating a budgeting app is an excellent project for beginners as it allows you to apply fundamental programming concepts while building a useful application. By following along with this tutorial, you will gain hands-on experience with C#, ASP.NET Core Blazor, and front-end web development.

By the end of this article, you will have a solid foundation in developing applications with Blazor and be empowered to tackle similar projects in the future! So, let’s get started and dive into how to make a budgeting app in C# and ASP.NET Core Blazor.


Why Create a Budgeting App with ASP.NET Core Blazor?

Creating a budgeting app using ASP.NET Core Blazor offers several advantages for individuals looking to build projects for practice. Budgeting is an essential practice for financial well-being, helping individuals track their income, expenses, and savings goals. As a result, it’s a very relatable area of focus giving you an interesting domain to program for. With Blazor, developers can leverage the power of C# and .NET to build dynamic and interactive web applications.

ASP.NET Core Blazor is an excellent choice for developing a budgeting app due to its code-reusability and component-based architecture. Blazor allows developers to write both client-side and server-side code using C# and Razor syntax. Personally, it’s the web tech I’ve been waiting for since I’m heavy into C# and hesitant when it comes to most web-based programming languages. By sharing code between the client and server, developers can achieve better maintainability and reduce development time.

In addition, using Blazor allows seamless integration with other .NET technologies and frameworks, such as Entity Framework Core for data persistence. Its modern and intuitive tools, like Visual Studio, make development efficient and enjoyable. By combining the power of C#, the versatility of .NET, and the simplicity of Blazor, developers can create a robust and user-friendly budgeting app that meets the needs of both beginners and experienced users.

In the next section, we’ll start on the steps for how to make a budgeting app in C#. Let’s go!


Sign up for Dev Leader Weekly!


Setting Up the Project

To begin developing a budgeting app using ASP.NET Core Blazor, you need to set up your development environment. Here are the steps to get started:

  1. Install Visual Studio: Visit the official Visual Studio website and download the version suitable for your operating system. Follow the installation instructions to set up Visual Studio on your machine.

  2. Install .NET Core SDK: Download and install the latest .NET Core SDK, which can be found on the official .NET website. The SDK includes the necessary tools and libraries to build .NET applications.

  3. Create a new Blazor project: Open Visual Studio and select “Create a new project.” In the project templates, search for “Blazor App” and choose the ASP.NET Core Blazor template. Specify a name and location for your project, and click “Create.”

  4. Project structure: Once your project is created, you will see a folder structure that contains various files and folders. The “Pages” folder is where you will create your app’s user interface using Blazor components. The “wwwroot” folder contains static files like CSS and JavaScript. Familiarize yourself with the purpose of each file and folder to understand the project structure better.

Now that you have your development environment set up and a new Blazor project created, you’re ready to start building your budgeting app. In the upcoming sections, we will dive into designing the user interface and implementing the app’s functionality using ASP.NET Core Blazor and C#.


Designing the User Interface

Crafting Blazor Components

User-friendly design is crucial for a budgeting app to ensure a smooth and intuitive user experience. I mean, a good UX is crucial for any app with real users! With ASP.NET Core Blazor, you can create a visually appealing and interactive UI. Blazor utilizes components, which are reusable UI elements that can be grouped together to build the app’s interface.

To create a budgeting app’s UI, you can start by designing components for input fields, buttons, and data visualization. These components can be customized to match your app’s branding and style. This is where your own personal touch can come in!

For example, you can create a reusable input form component using Blazor form components, making it easy for users to enter their budget details. Here’s a snippet for a reusable input form component in Blazor:

<EditForm Model="@budgetModel">
    <InputText @bind-Value="budgetModel.Amount" />
    <button type="submit">Submit</button>
</EditForm>

@code {
    private BudgetModel budgetModel = new BudgetModel();

    class BudgetModel
    {
        public decimal Amount { get; set; }
    }
}

Creating Input Forms

To create input forms for your budgeting app, you can leverage Blazor form components such as InputText and Checkbox. These components provide built-in functionality for handling user input and validation. You can customize these components with attributes like Required, MaxLength, and Pattern to enforce specific validation rules.

When developing input forms in Blazor, remember to consider potential user input errors. You can implement error handling techniques such as displaying error messages when validation fails or styling the input fields to indicate invalid input. This is good practice for beginners to be thinking about real use cases, edge cases, and even thinking through the exercise of how to test these sorts of things!

By providing a seamless and intuitive form experience, users will find it easier to enter their budget details accurately. There’s a lot of room for you to experiment with different approaches to validation and feedback!

Here’s some example code:

<EditForm Model="@budgetModel">
    <DataAnnotationsValidator />
    <InputText @bind-Value="budgetModel.Amount" required />
    <ValidationMessage For="@(() => budgetModel.Amount)" />
    <button type="submit">Submit</button>
</EditForm>

@code {
    private BudgetModel budgetModel = new BudgetModel();

    class BudgetModel
    {
        [Required]
        public decimal Amount { get; set; }
    }
}

Displaying Budget Data

Retrieving and displaying budget data is, of course, a key aspect of a budgeting app. In a Blazor app, you can fetch data from an API or a local database using asynchronous operations. This is where something like Entity Framework (many will refer to it as EF Core) can play a role. Once the data is retrieved, you can use Blazor’s data binding capabilities to display it within your UI components.

To enhance the visualization of budget data, consider incorporating charts and graphs. Blazor offers various charting libraries that you can integrate into your app, such as Chart.js or Syncfusion Blazor Charts. These libraries provide a wide range of chart types and customization options, allowing you to present budget statistics in an informative and visually appealing manner.


Implementing the Backend Functionality

To build a budgeting app using ASP.NET Core Blazor, we need to focus on developing the backend. This is where we define and implement the core functionalities such as recording income and expenses, setting budget goals, and generating financial reports. Do you need to do all of this? No. Can you bite off little bits of it at a time, like a vertical slice of functionality, and then deliver it as you’re gaining more experience? Of course!

Introducing Entity Framework Core

We will use Entity Framework Core (EF Core), a popular ORM (Object-Relational Mapping) tool in .NET, to interact with our database. It simplifies the process of performing CRUD (Create, Read, Update, Delete) operations and managing data. This ORM tool simplifies database interactions and provides efficient data management capabilities. You can explain how to handle data persistence using Entity Framework Core and showcase code samples for common data operations such as adding, updating, and deleting budget entries.

Before diving into the code, ensure you have Entity Framework Core installed and properly set up:

dotnet add package Microsoft.EntityFrameworkCore

Structuring the Backend

In Blazor, we use C# to structure our backend. Here’s a simplified breakdown of what we need to do:

  1. Define Models: Create classes representing the data, such as Transaction for income and expenses and Budget for budget goals.
public class Transaction
{
    public int Id { get; set; }
    public decimal Amount { get; set; }
    // Additional properties here
}

public class Budget
{
    public int Id { get; set; }
    public decimal Goal { get; set; }
    // Additional properties here
}
  1. Create a DbContext: Define a DbContext to interact with the database using Entity Framework Core.
public class AppDbContext : DbContext
{
    public DbSet<Transaction> Transactions { get; set; }
    public DbSet<Budget> Budgets { get; set; }
    // Additional DbSets here
}
  1. Configure the DB Context Factory: In order to avoid accidentally sharing the DB context when we do not expect to, we can leverage an IDbContextFactory. We’ll register this with our service collection.
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // NOTE: adjust based on your backing data store!
        services.AddDbContextFactory<AppDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddScoped<BudgetService>();
    }
    ...
}
  1. Implement Features: Write methods to add transactions, set budget goals, and generate reports. We create a new context from the factory per method call to avoid sharing instances accidentally.
public class BudgetService
{
    private readonly IDbContextFactory<AppDbContext> _contextFactory;

    public BudgetService(IDbContextFactory<AppDbContext> contextFactory)
    {
        _contextFactory = contextFactory;
    }

    public void AddTransaction(Transaction transaction)
    {
        using var context = _contextFactory.CreateDbContext();
        context.Transactions.Add(transaction);
        context.SaveChanges();
    }

    public void SetBudgetGoal(Budget budget)
    {
        using var context = _contextFactory.CreateDbContext();
        context.Budgets.Add(budget);
        context.SaveChanges();
    }

    // Additional methods for generating reports and other functionalities
}

By following these steps with your own flavor added to it, you can lay down the foundation for a functional budgeting app, enabling users to effectively manage their finances.


Deploying Your New C# Budgeting App

If you’ve enjoyed this article so far and want to read more about how to configure and deploy your app, check this out! If you’re interested in more learning opportunities, subscribe to my free weekly newsletter and check out my YouTube channel!


Want More Dev Leader Content?

  • Follow along on this platform if you haven’t already!

  • Subscribe to my free weekly software engineering and dotnet-focused newsletter. I include exclusive articles and early access to videos:
    SUBSCRIBE FOR FREE

  • Looking for courses? Check out my offerings:
    VIEW COURSES

  • Watch hundreds of full-length videos on my YouTube channel:
    VISIT CHANNEL

  • Visit my website for hundreds of articles on various software engineering topics (including code snippets):
    VISIT WEBSITE

  • Check out the repository with many code examples from my articles and videos on GitHub:
    VIEW REPOSITORY

0
Subscribe to my newsletter

Read articles from Dev Leader directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Dev Leader
Dev Leader

I'm a software engineering professional with over a decade of hands-on experience creating software and managing engineering teams. I graduated from the University of Waterloo in Honours Computer Engineering in 2012. I started blogging at https://www.devleader.ca in order to share my experiences about leadership, managing engineers, and 20+ years of programming. I'm the author of Dev Leader Weekly, which you can find here: https://devleaderweekly.substack.com And I create YouTube videos here: https://www.youtube.com/@DevLeader