CRUD operations (Create, Read, Update, Delete) are fundamental to any web application that interacts with a database. In ASP.NET MVC, you can implement these operations using a combination of models, views, and controllers. This guide will walk you through the process of implementing CRUD operations in an ASP.NET MVC application with sample code.

Step 1: Create a Model Class

First, you need to create a model class that represents the data structure you want to work with. Below is an example of a simple model class named Product:

        
public class Product
{
public int Id { get; set; } // Unique identifier for the product
public string Name { get; set; } // Name of the product
public decimal Price { get; set; } // Price of the product
}

Step 2: Create a Database Context

Next, create a database context class that inherits from DbContext. This class will manage the connection to the database and the entity objects. Below is an example of a context class named ApplicationDbContext:

        
using System.Data.Entity;

public class ApplicationDbContext : DbContext
{
public ApplicationDbContext() : base("DefaultConnection") // Connection string name
{
}

public DbSet<Product> Products { get; set; } // DbSet for Product entities
}

Step 3: Configure the Connection String

Define a connection string in the Web.config file of your ASP.NET MVC project. Below is an example of a connection string for a SQL Server database:

        
<connectionStrings>
<add name="DefaultConnection"
connectionString="Server=YOUR_SERVER_NAME;Database=YOUR_DATABASE_NAME;Trusted_Connection=True;"
providerName="System.Data.SqlClient" />
</connectionStrings>

Replace YOUR_SERVER_NAME and YOUR_DATABASE_NAME with your actual SQL Server instance and database name.

Step 4: Create a Controller

Create a controller that will handle the CRUD operations. Below is an example of a controller named ProductController:

        
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;

public class ProductController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();

// GET: Product
public ActionResult Index()
{
var products = db.Products.ToList(); // Retrieve all products from the database
return View(products); // Pass the list of products to the view
}

// GET: Product/Create
public ActionResult Create()
{
return View();
}

// POST: Product/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
db.Products.Add(product); // Add the new product to the context
db.SaveChanges(); // Save changes to the database
return RedirectToAction("Index"); // Redirect to the index action
}
return View(product); // Return the view with validation errors
}

// GET: Product/Edit/5
public ActionResult Edit(int id)
{
var product = db.Products.Find(id); // Find the product by id
if (product == null)
{
return HttpNotFound(); // Return 404 if not found
}
return View(product); // Pass the product to the view
}

// POST: Product/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Product product)
{
if (ModelState.IsValid)
{
db.Entry(product).State = EntityState.Modified; // Mark the product as modified
db.SaveChanges(); // Save changes to the database
return RedirectToAction("Index"); // Redirect to the index action
}
return View(product); // Return the view with validation errors
}

// GET: Product/Delete/5
public Action Result Delete(int id)
{
var product = db.Products.Find(id); // Find the product by id
if (product == null)
{
return HttpNotFound(); // Return 404 if not found
}
return View(product); // Pass the product to the view
}

// POST: Product/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
var product = db.Products.Find(id); // Find the product by id
db.Products.Remove(product); // Remove the product from the context
db.SaveChanges(); // Save changes to the database
return RedirectToAction("Index"); // Redirect to the index action
}
}

Step 5: Create Views

You need to create views for each action in the controller. Below is an example of the Index view that displays the list of products:

        
@model IEnumerable<YourNamespace.Models.Product>

<h2>Products</h2>

<p>
<@Html.ActionLink("Create New", "Create")>
</p>

<table class="table">
<tr>
<th>@Html.DisplayNameFor(model => model.First().Name)</th>
<th>@Html.DisplayNameFor(model => model.First().Price)</th>
<th>@Html.DisplayName("Actions")</th>
</tr>

@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.Name)</td>
<td>@Html.DisplayFor(modelItem => item.Price)</td>
<td>
<@Html.ActionLink("Edit", "Edit", new { id = item.Id })> |
<@Html.ActionLink("Delete", "Delete", new { id = item.Id })>
</td>
</tr>
}
</table>

Conclusion

Implementing CRUD operations in ASP.NET MVC is straightforward with the use of models, views, and controllers. By following the steps outlined above, you can create a fully functional application that allows users to manage data effectively. This structure not only promotes clean code but also enhances maintainability and scalability of your application.