একটি টু-ডু লিস্ট অ্যাপ সি#-এ তৈরি করা একটি চমৎকার প্র্যাকটিস প্রজেক্ট, যা আপনার ASP.NET এবং MVC প্যাটার্নের দক্ষতা বাড়াতে সাহায্য করবে। এই অ্যাপে ব্যবহারকারীরা তাদের দৈনন্দিন কাজগুলো যুক্ত, আপডেট, এবং মুছতে পারবে। এছাড়াও কাজগুলোকে কমপ্লিট বা ইনকমপ্লিট হিসেবে চিহ্নিত করতে পারবে।
Visual Studio বা .NET CLI ব্যবহার করে ASP.NET Core MVC প্রজেক্ট তৈরি করুন:
dotnet new mvc -o TodoApp
প্রজেক্টের Models ফোল্ডারে TodoItem
নামে একটি ক্লাস তৈরি করুন, যেখানে প্রতিটি টাস্কের জন্য প্রয়োজনীয় প্রোপার্টি থাকবে।
public class TodoItem
{
public int Id { get; set; }
public string Title { get; set; }
public bool IsCompleted { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.Now;
}
TodoContext নামে একটি DbContext ক্লাস তৈরি করুন, যা TodoItem
মডেলের সাথে ডেটাবেস কানেক্ট করবে।
using Microsoft.EntityFrameworkCore;
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options) : base(options) { }
public DbSet<TodoItem> TodoItems { get; set; }
}
Startup.cs ফাইলে ConfigureServices
মেথডে DbContext যুক্ত করুন:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<TodoContext>(options =>
options.UseSqlite("Data Source=todo.db"));
services.AddControllersWithViews();
}
dotnet ef migrations add InitialCreate
dotnet ef database update
TodoController নামে একটি কন্ট্রোলার তৈরি করুন, যা CRUD অপারেশন পরিচালনা করবে।
using Microsoft.AspNetCore.Mvc;
using System.Linq;
using System.Threading.Tasks;
public class TodoController : Controller
{
private readonly TodoContext _context;
public TodoController(TodoContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var todos = await _context.TodoItems.ToListAsync();
return View(todos);
}
[HttpPost]
public async Task<IActionResult> Create(TodoItem todo)
{
if (ModelState.IsValid)
{
_context.Add(todo);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(todo);
}
public async Task<IActionResult> Edit(int id)
{
var todo = await _context.TodoItems.FindAsync(id);
if (todo == null)
{
return NotFound();
}
return View(todo);
}
[HttpPost]
public async Task<IActionResult> Edit(TodoItem todo)
{
if (ModelState.IsValid)
{
_context.Update(todo);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(todo);
}
public async Task<IActionResult> Delete(int id)
{
var todo = await _context.TodoItems.FindAsync(id);
if (todo != null)
{
_context.TodoItems.Remove(todo);
await _context.SaveChangesAsync();
}
return RedirectToAction(nameof(Index));
}
[HttpPost]
public async Task<IActionResult> ToggleComplete(int id)
{
var todo = await _context.TodoItems.FindAsync(id);
if (todo != null)
{
todo.IsCompleted = !todo.IsCompleted;
await _context.SaveChangesAsync();
}
return RedirectToAction(nameof(Index));
}
}
Views/Todo/Index.cshtml ফাইলে টু-ডু লিস্ট প্রদর্শনের জন্য HTML কোড লিখুন।
@model IEnumerable<TodoItem>
<h2>Todo List</h2>
<form asp-action="Create" method="post">
<input type="text" name="Title" placeholder="Enter new task" required />
<button type="submit">Add Task</button>
</form>
<table>
<thead>
<tr>
<th>Task</th>
<th>Status</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var todo in Model)
{
<tr>
<td>@todo.Title</td>
<td>
<form asp-action="ToggleComplete" method="post">
<input type="hidden" name="id" value="@todo.Id" />
<button type="submit">@((todo.IsCompleted ? "Completed" : "Incomplete"))</button>
</form>
</td>
<td>
<a asp-action="Edit" asp-route-id="@todo.Id">Edit</a> |
<a asp-action="Delete" asp-route-id="@todo.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
Bootstrap ব্যবহার করে CSS স্টাইল যোগ করুন, যাতে ইন্টারফেস আরও আকর্ষণীয় দেখায়।
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
প্রজেক্ট রান করতে dotnet run
কমান্ডটি ব্যবহার করুন অথবা Visual Studio থেকে Run ক্লিক করুন। তারপর ব্রাউজারে https://localhost:5001/Todo
এ যান।
অ্যাপটি আরও উন্নত করতে কিছু অতিরিক্ত ফিচার যোগ করতে পারেন:
এই প্রোজেক্টটি ASP.NET Core এর MVC প্যাটার্ন, Entity Framework এবং ডিপেনডেন্সি ইনজেকশনের ব্যবহার শেখার জন্য চমৎকার একটি প্র্যাকটিস।
আরও দেখুন...