How To Make A Budgeting App In C# With Blazor

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!


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

After crafting your budgeting app with ASP.NET Core Blazor, it’s time to introduce it to the world by deploying it. Even if you only want to use it for yourself, this is still a good exercise! If you do want it to be accessible to others, then this will be a critical step. In this section, we’ll step through the basics of the deployment process, ensuring your app runs smoothly for all to use.

Choosing a Hosting Platform

Firstly, decide where you want to host your app. There are TONS of options, ranging from shared hosting providers and virtual private servers (VPS) to cloud platforms like RackNerd, Azure, or AWS. And just a heads up for full transparency, I do have an affiliate link for RackNerd, but I currently have 30+ servers with them through their VPS hosting options so I only promote what I use. Your choice will depend on your app’s requirements, your budget, and your preference for scalability and control. I also use Azure and AWS, but RackNerd has some extremely inexpensive VPS hosting options that I really like.

Configuring for Deployment

Before deploying, ensure your app is configured correctly. Update the appsettings.json file with the production settings, particularly the database connection strings and any API keys. Here’s a snippet of what it might look like:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=your_server;Database=your_db;User Id=your_user;Password=your_password;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Publishing Your App

Once configured, it’s time to publish. In Visual Studio, right-click on your project and select “Publish”. Choose the target depending on your hosting platform, and follow the prompts to publish your app. Ensure that you have the necessary credentials and access rights for the hosting platform.

dotnet publish -c Release

This command builds the app in Release configuration and packages it for deployment.


Wrapping Up How To Make A Budgeting App In C# With Blazor

Creating a budgeting app using ASP.NET Core Blazor can be a rewarding project for both beginners and experienced software engineers. Throughout this article, we have explored the process of designing a user-friendly interface with reusable UI components and discussed how to create input forms and display budget data using Blazor. And a little side note: The more I use and write about Blazor, the more I am in love with it.

We have also covered the high-level ideas for the implementation of backend functionality, such as adding income and expenses while emphasizing the use of C# code and Entity Framework Core for data persistence. Additionally, we looked at how to take steps for deploying your application.

By following the steps outlined in this article, you’ll be well-equipped to develop your own budgeting app in C#. So, why not give it a try? Start building your budgeting app today! For further learning and exploration, be sure to subscribe to the Dev Leader Weekly newsletter for regular software engineering and C# tips. Happy coding!

author avatar
Nick Cosentino Principal Software Engineering Manager
Principal Software Engineering Manager at Microsoft. Views are my own.

This Post Has 4 Comments

  1. سعيد

    Life-time of DbContext should be managed differently in Blazor server apps otherwise it will be shared. There’s a factory for it in newer versions.

    1. Nick Cosentino

      Thanks for the call out! Let me go ahead and make an adjustment to the article. I appreciate it!

  2. TechyList

    This is a great blog post! I’m a C# developer and I’ve been wanting to make a budgeting app, so this is really helpful.

    1. Nick Cosentino

      That’s awesome!! If you get one put together and it’s up on github, consider sending me the link to the repo so I can check it out!

Leave a Reply