মডেলস (Models) এবং ডাটাবাইন্ডিং (Data Binding) হলো ASP.Net MVC বা ASP.Net Core অ্যাপ্লিকেশনগুলির মূল অংশ, যা ডেটা পরিচালনা এবং ইউজারের ইন্টারফেসের সাথে ডেটার মিথস্ক্রিয়া সহজ করে। Model অ্যাপ্লিকেশনের ডেটা এবং ব্যবসায়িক লজিক ধারণ করে, এবং Data Binding এর মাধ্যমে এটি Views এ প্রদর্শিত হয়।
Model হল অ্যাপ্লিকেশনের ডেটা এবং ব্যবসায়িক লজিকের প্রতিনিধিত্ব। এটি ডেটাবেস, ফাইল সিস্টেম বা অন্যান্য সোর্স থেকে ডেটা পরিচালনা এবং প্রক্রিয়া করে।
মডেল সাধারণত C# ক্লাস হিসেবে তৈরি হয় এবং এতে প্রপার্টি থাকে, যা অ্যাপ্লিকেশনটির ডেটা স্টোর করে।
ধরা যাক, আপনি একটি পণ্য (Product) মডেল তৈরি করতে চান, যা পণ্যের নাম, মূল্য এবং স্টক পরিমাণ ধারণ করবে।
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int Stock { get; set; }
}
এখানে Product মডেলটির ৪টি প্রপার্টি রয়েছে: Id
, Name
, Price
, এবং Stock
।
মডেল ক্লাসটি ডেটাবেসের টেবিলের সাথে সম্পর্কিত হতে পারে। Entity Framework Core ব্যবহার করে আপনি মডেল ক্লাসের মাধ্যমে ডেটাবেসের ডেটা পরিচালনা করতে পারেন।
ডাটাবাইন্ডিং হল একটি প্রক্রিয়া, যার মাধ্যমে মডেল থেকে ডেটা ভিউতে (View) প্রেরিত হয় এবং ইউজারের ইনপুট আবার মডেলে পাঠানো হয়। ASP.Net MVC বা ASP.Net Core অ্যাপ্লিকেশনে Razor ভিউ ইঞ্জিনের মাধ্যমে ডাটাবাইন্ডিং করা হয়।
ডাটাবাইন্ডিং দুটি ধরনের হতে পারে:
এই প্রক্রিয়ায়, কন্ট্রোলার মডেল থেকে ডেটা নিয়ে ভিউতে পাঠায়। উদাহরণস্বরূপ, আপনি একটি পণ্যের তালিকা প্রদর্শন করতে চান, যা ডেটাবেস থেকে নেওয়া হবে।
public class ProductController : Controller
{
private readonly ApplicationDbContext _context;
public ProductController(ApplicationDbContext context)
{
_context = context;
}
public IActionResult Index()
{
var products = _context.Products.ToList();
return View(products); // View এ products ডেটা পাঠানো হচ্ছে।
}
}
এখানে, কন্ট্রোলার থেকে পাঠানো ডেটা View তে ডাটাবাইন্ডিং হবে।
@model IEnumerable<Product> <!-- মডেল টাইপ সংজ্ঞায়িত করা -->
<h2>Product List</h2>
<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Price</th>
</tr>
</thead>
<tbody>
@foreach (var product in Model)
{
<tr>
<td>@product.Id</td>
<td>@product.Name</td>
<td>@product.Price</td>
</tr>
}
</tbody>
</table>
এখানে @model
ডিরেকটিভের মাধ্যমে, ভিউটি Product মডেলের একটি তালিকা গ্রহণ করছে। @foreach
লুপের মাধ্যমে প্রতিটি পণ্যের ডেটা HTML টেবিলে প্রদর্শিত হচ্ছে।
এই প্রক্রিয়ায়, ইউজার ইনপুট ফর্মের মাধ্যমে মডেলে প্রেরিত হয়। যেমন, একটি ফর্মে ইউজার নতুন পণ্য যোগ করতে চান। ইউজারের ইনপুট নিয়ে সেটি Model এ বেঁধে (bind) পাঠানো হবে।
[HttpPost]
public IActionResult Create(Product product)
{
if (ModelState.IsValid)
{
_context.Products.Add(product);
_context.SaveChanges();
return RedirectToAction("Index");
}
return View(product);
}
এখানে, @model Product
ডিরেকটিভ দিয়ে পণ্য মডেলটি ভিউতে বেঁধে (bind) ইনপুট ফিল্ড তৈরি করা হচ্ছে।
@model Product
<h2>Create New Product</h2>
<form method="post">
<div class="form-group">
<label for="Name">Name</label>
<input type="text" class="form-control" id="Name" name="Name" value="@Model.Name" />
</div>
<div class="form-group">
<label for="Price">Price</label>
<input type="number" class="form-control" id="Price" name="Price" value="@Model.Price" />
</div>
<div class="form-group">
<label for="Stock">Stock</label>
<input type="number" class="form-control" id="Stock" name="Stock" value="@Model.Stock" />
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
এখানে, ফর্মের ইনপুট ফিল্ডগুলো Model এর সাথে বেঁধে (bind) আছে, এবং ইউজারের ইনপুট মডেল এপ্লিকেশন সার্ভারে পাঠিয়ে দেওয়া হবে।
@model Product
।মডেলস (Models) এবং ডাটাবাইন্ডিং (Data Binding) ASP.Net MVC অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ ধারণা। Models ডেটা ধারণ করে এবং Views এ তা উপস্থাপন করতে সাহায্য করে। ডাটাবাইন্ডিংয়ের মাধ্যমে, মডেল থেকে ভিউতে ডেটা প্রেরণ করা হয় এবং ভিউ থেকে মডেলে ডেটা পাঠানো হয়। Strongly typed data binding ব্যবহার করলে কোডের টাইপ সেফটি বজায় থাকে এবং অ্যাপ্লিকেশনের বাগ কম হয়।
ASP.Net অ্যাপ্লিকেশনে Model হলো ডেটা এবং তার লজিকের প্রতিনিধিত্বকারী অংশ। এটি সাধারণত ডাটাবেসের টেবিলগুলোর সাথে সম্পর্কিত থাকে এবং ইউজার ইনপুট বা ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়। ASP.Net MVC বা ASP.Net Core MVC অ্যাপ্লিকেশনে Model ক্লাসের মাধ্যমে ডেটা ধারণ করা হয়।
ASP.Net প্রজেক্টে Model তৈরি করতে আপনাকে একটি সাধারণ C# ক্লাস তৈরি করতে হবে, যা আপনার অ্যাপ্লিকেশনের ডেটা স্ট্রাকচার বা ডোমেন অবজেক্টকে প্রতিনিধিত্ব করবে।
উদাহরণ:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int StockQuantity { get; set; }
}
এখানে, Product
ক্লাসটি একটি পণ্য (Product) এর জন্য মডেল, যার মধ্যে চারটি প্রপার্টি রয়েছে: Id
, Name
, Price
, এবং StockQuantity
।
ASP.Net Core অ্যাপ্লিকেশনে Entity Framework (EF) ব্যবহার করে ডেটাবেস মডেল তৈরি করা হয়। আপনি একটি DbContext ক্লাস ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ করতে পারেন।
ApplicationDbContext
ক্লাস তৈরি করুন এবং এতে DbSet<T>
প্রপার্টি গুলি অন্তর্ভুক্ত করুন।using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Product> Products { get; set; }
}
এখানে, ApplicationDbContext
ক্লাসটি DbContext থেকে ইনহেরিট করে এবং Products
নামে একটি DbSet<Product>
প্রপার্টি ডিফাইন করা হয়েছে, যা ডেটাবেসের Products টেবিলের প্রতিনিধিত্ব করে।
ASP.Net Core অ্যাপ্লিকেশনে DbContext কনফিগার করার জন্য আপনাকে Startup.cs
ফাইলে ConfigureServices মেথডে Entity Framework কনফিগার করতে হবে।
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
এখানে, UseSqlServer
ব্যবহার করে SQL Server ডাটাবেসের সাথে সংযোগ স্থাপন করা হচ্ছে। আপনি আপনার ডাটাবেস কনফিগারেশন এবং কানেকশন স্ট্রিং appsettings.json
ফাইলে সংজ্ঞায়িত করতে পারেন।
মডেল তৈরি করার পরে, Entity Framework এর মাধ্যমে ডেটাবেস তৈরি বা আপডেট করা হয়। এজন্য Migration ব্যবহার করা হয়।
Package Manager Console:
Add-Migration InitialCreate
Update-Database
.NET CLI:
dotnet ef migrations add InitialCreate
dotnet ef database update
এটি ডাটাবেস টেবিল তৈরি করবে, যার মধ্যে আপনার মডেল ক্লাসের প্রপার্টিগুলি থাকবে।
ASP.Net MVC বা ASP.Net Core MVC অ্যাপ্লিকেশনে মডেল ক্লাসের মধ্যে Data Annotations ব্যবহার করে ডেটা ভ্যালিডেশন করা যেতে পারে। উদাহরণস্বরূপ, আপনি ফিল্ডগুলোকে আবশ্যক বা নির্দিষ্ট ফরম্যাটে রাখতে পারেন।
public class Product
{
public int Id { get; set; }
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
[Range(0.01, double.MaxValue, ErrorMessage = "Price must be greater than 0")]
public decimal Price { get; set; }
[Range(0, int.MaxValue, ErrorMessage = "Stock Quantity cannot be negative")]
public int StockQuantity { get; set; }
}
এখানে:
Name
প্রপার্টি আবশ্যক করা হয়েছে।Price
এবং StockQuantity
এর মান সীমাবদ্ধ করা হয়েছে।ASP.Net অ্যাপ্লিকেশনে মডেল তৈরি করা একটি গুরুত্বপূর্ণ কাজ, যা ডেটা এবং লজিকের মধ্যে সংযোগ স্থাপন করে। Entity Framework ব্যবহার করে মডেল এবং ডাটাবেস সম্পর্কিত কার্যক্রম সহজভাবে করা যায়। এছাড়া, মডেল ক্লাসে Data Annotations ব্যবহার করে ইনপুট ভ্যালিডেশন সহজ করা সম্ভব।
Data Annotations হলো একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ASP.Net মডেল ক্লাসগুলির মধ্যে ডেটা ভ্যালিডেশন এবং ফর্ম্যাটিং পরিচালনা করতে ব্যবহৃত হয়। এটি মূলত সিএসএস (C#) ক্লাসের প্রোপার্টির উপর বিভিন্ন বৈশিষ্ট্য যোগ করতে সাহায্য করে, যা ডেটা ভ্যালিডেশন এবং ডেটা ফরম্যাটিংয়ের জন্য কাজ করে। ASP.Net Core এবং ASP.Net MVC এ এই টেকনিক্যাল ফিচারটি বিশেষভাবে ব্যবহৃত হয়।
Data Annotations হলো C# এর ক্লাস প্রোপার্টিতে বিভিন্ন বৈশিষ্ট্য নির্ধারণের জন্য ব্যবহৃত অ্যাট্রিবিউট (Attributes)। এগুলি মডেল বা ক্লাসের বৈধতা পরীক্ষা করতে, ডেটার ফরম্যাট নিশ্চিত করতে, এবং ইন্টারফেসে প্রেরিত ডেটার জন্য কিছু বিধিনিষেধ বা সীমাবদ্ধতা সেট করতে ব্যবহৃত হয়।
Data Annotations ব্যবহার করার মাধ্যমে আপনি ভ্যালিডেশন নিয়মগুলো সরাসরি মডেল ক্লাসে সংজ্ঞায়িত করতে পারেন, যেটি অটোমেটিক্যালি ফর্ম সাবমিশন, API কনট্রোলার বা MVC অ্যাপ্লিকেশনের মাধ্যমে পরিচালিত হবে।
ASP.Net এ Data Annotations এর কয়েকটি সাধারণ অ্যাট্রিবিউট ব্যবহার করা হয়:
[Required] অ্যাট্রিবিউট ব্যবহার করা হয় একটি প্রোপার্টি বা ফিল্ডকে বাধ্যতামূলক করার জন্য। অর্থাৎ, এটি ফিল্ডটি খালি থাকতে পারবে না।
public class UserModel
{
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
}
[StringLength] অ্যাট্রিবিউট ব্যবহার করা হয় একটি স্ট্রিং ফিল্ডের সর্বাধিক এবং ন্যূনতম দৈর্ঘ্য নির্ধারণের জন্য।
public class UserModel
{
[StringLength(100, MinimumLength = 5, ErrorMessage = "Username should be between 5 and 100 characters.")]
public string Username { get; set; }
}
[Range] অ্যাট্রিবিউট ব্যবহার করা হয় একটি সংখ্যার নির্দিষ্ট পরিসরের মধ্যে থাকতে বাধ্য করার জন্য।
public class ProductModel
{
[Range(1, 1000, ErrorMessage = "Price must be between 1 and 1000")]
public decimal Price { get; set; }
}
[EmailAddress] অ্যাট্রিবিউট ব্যবহার করা হয় একটি স্ট্রিং ফিল্ডের মাধ্যমে ইমেইল অ্যাড্রেস ভ্যালিডেট করার জন্য।
public class UserModel
{
[EmailAddress(ErrorMessage = "Please enter a valid email address")]
public string Email { get; set; }
}
[Compare] অ্যাট্রিবিউট দুটি প্রোপার্টির মান তুলনা করতে ব্যবহার করা হয়। এটি সাধারণত পাসওয়ার্ড ফিল্ডের ক্ষেত্রে ব্যবহৃত হয়।
public class UserModel
{
public string Password { get; set; }
[Compare("Password", ErrorMessage = "Password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
[DataType] অ্যাট্রিবিউট একটি প্রোপার্টির জন্য নির্দিষ্ট ডেটা ধরনের নির্দেশনা দেয়, যেমন ফোন নম্বর, ডেট, অথবা পাসওয়ার্ড।
public class UserModel
{
[DataType(DataType.PhoneNumber)]
public string PhoneNumber { get; set; }
}
[RegularExpression] অ্যাট্রিবিউট ব্যবহার করা হয় একটি নির্দিষ্ট রেগুলার এক্সপ্রেশন অনুযায়ী ডেটার ফরম্যাট চেক করার জন্য।
public class UserModel
{
[RegularExpression(@"^\d{10}$", ErrorMessage = "Phone number must be 10 digits.")]
public string PhoneNumber { get; set; }
}
Validation হলো ডেটার সঠিকতা নিশ্চিত করার প্রক্রিয়া। ASP.Net MVC বা Core অ্যাপ্লিকেশনে, Data Annotations সাধারণত ভ্যালিডেশন প্রয়োগের জন্য ব্যবহৃত হয়। এটি নিশ্চিত করে যে ব্যবহারকারী প্রদত্ত ডেটা সঠিক এবং প্রত্যাশিত নিয়ম অনুসরণ করছে।
ভ্যালিডেশন সাধারণত Client-Side Validation এবং Server-Side Validation এ বিভক্ত করা যায়।
ASP.Net MVC বা Core এ, server-side validation ModelState.IsValid মেথড দিয়ে পরীক্ষা করা হয়:
if (ModelState.IsValid)
{
// Valid data, process the request
}
else
{
// Invalid data, show error messages
}
এখানে একটি সাধারণ উদাহরণ দেওয়া হলো, যেখানে একটি UserModel ক্লাস ব্যবহার করে ভ্যালিডেশন করা হয়েছে:
public class UserModel
{
[Required(ErrorMessage = "Name is required")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "Name must be between 3 and 50 characters.")]
public string Name { get; set; }
[EmailAddress(ErrorMessage = "Please enter a valid email address")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required")]
[StringLength(100, MinimumLength = 6, ErrorMessage = "Password must be at least 6 characters long.")]
public string Password { get; set; }
}
এবং অ্যাকশন মেথডে, ModelState.IsValid চেক করে ইনপুট ডেটার বৈধতা পরীক্ষা করা হয়:
[HttpPost]
public IActionResult Register(UserModel userModel)
{
if (ModelState.IsValid)
{
// Process registration
}
else
{
// Return view with validation errors
return View(userModel);
}
}
Data Annotations ASP.Net এ ডেটা ভ্যালিডেশন এবং ফরম্যাটিংয়ের জন্য একটি সহজ এবং শক্তিশালী টুল। এটি মডেল ক্লাসের প্রোপার্টিতে বিভিন্ন ভ্যালিডেশন রুল অ্যাপ্লাই করতে সাহায্য করে, যেমন Required, StringLength, Range, এবং EmailAddress। Data Annotations এর মাধ্যমে আপনি সহজে Client-Side এবং Server-Side ভ্যালিডেশন পরিচালনা করতে পারেন, যা ASP.Net অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং নিরাপদ করে তোলে।
ASP.Net অ্যাপ্লিকেশনে ফর্ম ডেটা সংগ্রহ করা এবং মডেলে বাইন্ড করা একটি সাধারণ প্রক্রিয়া, যা Model Binding এর মাধ্যমে সহজে সম্পন্ন করা যায়। Model Binding হল একটি প্রক্রিয়া যেখানে ফর্মের ইনপুট ডেটা সরাসরি একটি C# মডেল ক্লাসে ম্যাপ করা হয়। এটি অ্যাপ্লিকেশন ডেভেলপমেন্টকে অনেক সহজ এবং পরিষ্কার করে তোলে।
এখানে ASP.Net MVC অথবা ASP.Net Core MVC অ্যাপ্লিকেশনে ফর্ম ডেটা সংগ্রহ এবং মডেলে বাইন্ড করার প্রক্রিয়া ব্যাখ্যা করা হয়েছে।
ASP.Net MVC বা ASP.Net Core MVC অ্যাপ্লিকেশনে ফর্ম ডেটা সংগ্রহ করতে সাধারণত HTML ফর্ম এবং Controller এর মধ্যে ইন্টারঅ্যাকশন করা হয়। ফর্মের ইনপুট ডেটা যখন POST করা হয়, তখন তা মডেল ক্লাসে বাইন্ড করা হয়।
প্রথমে HTML ফর্ম তৈরি করতে হবে যেখানে ব্যবহারকারী ইনপুট দেবে:
Example (Index.cshtml):
<form method="post" action="/Home/Create">
<div>
<label for="Name">Name</label>
<input type="text" id="Name" name="Name" />
</div>
<div>
<label for="Email">Email</label>
<input type="email" id="Email" name="Email" />
</div>
<button type="submit">Submit</button>
</form>
এই ফর্মে, Name
এবং Email
ইনপুট ফিল্ড রয়েছে এবং যখন ফর্মটি সাবমিট হবে, তখন ডেটা POST হয়ে HomeController এর Create
অ্যাকশনে পাঠানো হবে।
এখন, ডেটা যেটি ফর্ম থেকে পাঠানো হবে তা গ্রহণ করার জন্য একটি মডেল ক্লাস তৈরি করতে হবে।
Example (Person.cs):
public class Person
{
public string Name { get; set; }
public string Email { get; set; }
}
এটি একটি সাধারণ মডেল ক্লাস যা ফর্মের Name
এবং Email
ইনপুটগুলোর জন্য প্রপার্টি ধারণ করে।
ফর্মের ডেটা মডেলে বাইন্ড করতে Controller এর POST অ্যাকশন ব্যবহার করতে হবে। এখানে ASP.Net MVC বা ASP.Net Core MVC স্বয়ংক্রিয়ভাবে ফর্ম ইনপুট ডেটা গ্রহণ করে এবং তা মডেল ক্লাসের প্রপার্টি সাথে বাইন্ড করে।
Example (HomeController.cs):
public class HomeController : Controller
{
[HttpGet]
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Create(Person person)
{
if (ModelState.IsValid)
{
// মডেল ডেটা সফলভাবে বাইন্ড হয়েছে
// এখানে আপনি ডেটাবেসে সংরক্ষণ করতে পারেন অথবা অন্য কোনো প্রসেস করতে পারেন
return RedirectToAction("Index");
}
return View("Index");
}
}
এখানে, Create অ্যাকশন মেথডের মধ্যে Person
মডেলটি স্বয়ংক্রিয়ভাবে ফর্ম ডেটা দ্বারা পূর্ণ হবে। ASP.Net MVC বা ASP.Net Core MVC মডেল বাইন্ডিং প্রক্রিয়া ব্যবহার করে Name এবং Email ফর্ম ইনপুটগুলো Person
মডেলের প্রপার্টি Name
এবং Email
এ সেট করে দেবে।
ASP.Net এবং ASP.Net Core MVC এ Model Validation খুবই গুরুত্বপূর্ণ। আপনি মডেল ক্লাসের মধ্যে Data Annotations ব্যবহার করে ইনপুট ভ্যালিডেশন করতে পারেন।
Example (Person.cs):
public class Person
{
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
}
এখানে, Required
অ্যাট্রিবিউট ব্যবহার করা হয়েছে যাতে Name এবং Email ইনপুট ফিল্ডগুলো অবশ্যই পূর্ণ হতে হবে, এবং EmailAddress
অ্যাট্রিবিউট দিয়ে ইমেইল ফিল্ডটি সঠিক ফরম্যাটে থাকতে হবে।
[HttpPost]
public IActionResult Create(Person person)
{
if (ModelState.IsValid)
{
// যদি মডেলটি সঠিকভাবে ভ্যালিড থাকে
// ডেটা প্রসেস করা হবে
return RedirectToAction("Index");
}
return View("Index");
}
ModelState.IsValid ব্যবহার করে আপনি চেক করতে পারেন যে, ফর্ম ডেটা সঠিকভাবে ভ্যালিড হয়েছে কিনা।
ASP.Net অ্যাপ্লিকেশনে ফর্ম ডেটা সংগ্রহ করা এবং মডেলে বাইন্ড করা একটি সরল এবং কার্যকরী প্রক্রিয়া। Razor views এর মাধ্যমে ফর্ম তৈরি করা হয় এবং ASP.Net MVC বা ASP.Net Core MVC অ্যাকশন মেথডে ডেটা মডেল ক্লাসে বাইন্ড হয়। এছাড়া, Model Binding এবং Model Validation এর মাধ্যমে ডেটা সহজভাবে সংগ্রহ ও যাচাই করা যায়, যা আপনার অ্যাপ্লিকেশনের প্রক্রিয়াকে অনেক সহজ এবং সুরক্ষিত করে।
ViewModel একটি ডিজাইন প্যাটার্ন যা MVC (Model-View-Controller) আর্কিটেকচারে ব্যবহার করা হয়। এটি Model এবং View এর মধ্যে একটি মধ্যস্থতাকারী হিসেবে কাজ করে, যা শুধুমাত্র View এর জন্য প্রয়োজনীয় ডেটা ধারণ করে। ViewModel সাধারণত Model এর চেয়ে একটি আলাদা কাস্টম ডেটা কন্টেইনার হয়ে থাকে, যাতে View এর জন্য নির্দিষ্ট প্রয়োজনীয় ডেটা থাকে।
ASP.Net MVC এবং ASP.Net Core অ্যাপ্লিকেশনে ViewModel ব্যবহার ডেটার পার্সিং, ভিউ লজিক এবং UI উপস্থাপনাকে আরও দক্ষ ও পরিষ্কার করে তোলে।
ViewModel ব্যবহার করার মাধ্যমে আপনি Model এর বিভিন্ন ডেটা একত্রিত করে একটি বিশেষভাবে ফর্ম্যাট করা ডেটা স্ট্রাকচার তৈরি করতে পারেন, যা কেবলমাত্র ভিউর জন্য প্রাসঙ্গিক।
ধরা যাক, আমাদের একটি Product এবং Category মডেল রয়েছে এবং আমরা চাচ্ছি ভিউতে এই দুটি মডেল সংযুক্ত করে একটি ভিউ তৈরি করতে।
ViewModel Example:
public class ProductViewModel
{
public string ProductName { get; set; }
public decimal Price { get; set; }
public string CategoryName { get; set; }
}
এখানে, ProductViewModel ক্লাসে আমরা Product এবং Category এর কিছু ডেটা ধারণ করেছি, যা ভিউতে রেন্ডার হবে।
এখন Controller থেকে আমরা ProductViewModel পাঠাবো এবং ভিউতে রেন্ডার করব।
Controller Example:
public class ProductController : Controller
{
public IActionResult Index()
{
var products = new List<ProductViewModel>
{
new ProductViewModel { ProductName = "Laptop", Price = 1000, CategoryName = "Electronics" },
new ProductViewModel { ProductName = "Shirt", Price = 50, CategoryName = "Clothing" }
};
return View(products);
}
}
এখানে, Index() অ্যাকশনটি একটি List তৈরি করেছে এবং সেটি View এ পাঠাচ্ছে।
এখন আমরা View এ ProductViewModel এর ডেটা রেন্ডার করব।
View Example (Razor):
@model List<ProductViewModel>
<h1>Product List</h1>
<table>
<tr>
<th>Product Name</th>
<th>Price</th>
<th>Category</th>
</tr>
@foreach (var product in Model)
{
<tr>
<td>@product.ProductName</td>
<td>@product.Price</td>
<td>@product.CategoryName</td>
</tr>
}
</table>
এখানে, Model হয়ে List পাস করা হয়েছে। এরপর, আমরা foreach লুপ ব্যবহার করে প্রতিটি ProductViewModel এর প্রপার্টি (যেমন ProductName, Price, এবং CategoryName) ভিউতে প্রদর্শন করেছি।
ProductViewModel
।Validation: আপনি DataAnnotations ব্যবহার করে ViewModel এ ইনপুট ভ্যালিডেশন যুক্ত করতে পারেন। উদাহরণস্বরূপ:
public class ProductViewModel
{
[Required]
public string ProductName { get; set; }
[Range(1, 10000)]
public decimal Price { get; set; }
}
সারাংশ:
ViewModel ASP.Net MVC এবং ASP.Net Core অ্যাপ্লিকেশনে ডেটা এবং ভিউয়ের মধ্যে সম্পর্ক স্থাপনে গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি ডেটাকে Controller থেকে View তে পাঠানোর একটি শক্তিশালী এবং ক্লিন পদ্ধতি সরবরাহ করে, যা অ্যাপ্লিকেশন উন্নত পারফরম্যান্স এবং স্কেলেবিলিটি প্রদান করতে সহায়ক।
Strongly Typed Views হলো ASP.Net MVC বা ASP.Net Core MVC অ্যাপ্লিকেশনগুলিতে এমন ভিউ, যেখানে model বা ডেটা ক্লাস নির্দিষ্টভাবে টাইপ করা থাকে। এটি ভিউ ফাইলকে একটি নির্দিষ্ট model টাইপের সাথে যুক্ত করে, যা ভিউতে ব্যবহৃত ডেটা সম্পূর্ণভাবে টাইপ সেফ (type-safe) করে তোলে।
Razor ভিউ ইঞ্জিনে Strongly Typed Views ব্যবহার করা হলে, আপনার Model অবজেক্টের প্রপার্টি এবং মেথডগুলির জন্য IntelliSense এবং compile-time checking সুবিধা পাওয়া যায়। এর ফলে কোড লেখার সময় ভুল করার সম্ভাবনা কমে যায় এবং কোড আরও পরিষ্কার, সুরক্ষিত ও সহজে বজায় রাখা সম্ভব হয়।
একটি strongly typed ভিউ তৈরি করতে, প্রথমে আপনি আপনার Controller থেকে একটি model ভিউতে পাস করবেন। সাধারণত ActionResult এর মাধ্যমে এটি করা হয়।
উদাহরণ:
public class HomeController : Controller
{
public IActionResult Index()
{
var model = new Product
{
Name = "Laptop",
Price = 1200
};
return View(model);
}
}
এখানে, Product একটি মডেল যা Name এবং Price প্রপার্টি ধারণ করে। এই মডেলটি View এ পাস করা হচ্ছে।
ভিউ ফাইলে মডেল টাইপ ডিফাইন করতে, Razor এ @model নির্দেশক ব্যবহার করতে হয়।
@model YourNamespace.Models.Product
<!DOCTYPE html>
<html>
<head>
<title>Product Details</title>
</head>
<body>
<h1>Product Name: @Model.Name</h1>
<p>Price: @Model.Price</p>
</body>
</html>
এখানে, @model YourNamespace.Models.Product দ্বারা ভিউটি Product মডেল টাইপের সাথে যুক্ত করা হয়েছে। তারপর, @Model.Name এবং @Model.Price দিয়ে মডেলটির প্রপার্টি রেন্ডার করা হয়েছে।
আপনি যদি Partial Views ব্যবহার করেন, তাহলে তাও strongly typed করা যেতে পারে। Partial View-এও আপনি একইভাবে মডেল টাইপ ডিফাইন করবেন।
Controller এ Partial View পাস করা:
public IActionResult GetProductDetails()
{
var product = new Product { Name = "Smartphone", Price = 800 };
return PartialView("_ProductDetails", product);
}
Partial View (/_ProductDetails.cshtml):
@model YourNamespace.Models.Product
<div>
<h3>@Model.Name</h3>
<p>Price: @Model.Price</p>
</div>
এখানে, _ProductDetails partial view একটি strongly typed ভিউ, যেখানে Product
মডেল পাস করা হচ্ছে।
Strongly Typed Views ব্যবহার করে আপনি model validation এর সুবিধাও নিতে পারেন। ASP.Net MVC এবং ASP.Net Core MVC তে Data Annotations ব্যবহার করে মডেল ভ্যালিডেশন করা যায়।
public class Product
{
[Required(ErrorMessage = "Product Name is required")]
public string Name { get; set; }
[Range(1, 10000, ErrorMessage = "Price must be between 1 and 10000")]
public decimal Price { get; set; }
}
এখানে, Product মডেলে [Required] এবং [Range] অ্যাট্রিবিউট দিয়ে ভ্যালিডেশন সেট করা হয়েছে।
@model YourNamespace.Models.Product
<form method="post">
<div>
<label for="Name">Product Name:</label>
<input type="text" id="Name" name="Name" value="@Model.Name" />
@Html.ValidationMessageFor(model => model.Name)
</div>
<div>
<label for="Price">Price:</label>
<input type="text" id="Price" name="Price" value="@Model.Price" />
@Html.ValidationMessageFor(model => model.Price)
</div>
<button type="submit">Submit</button>
</form>
এখানে, @Html.ValidationMessageFor ব্যবহার করে মডেল ভ্যালিডেশন ত্রুটি প্রদর্শন করা হচ্ছে।
Strongly Typed Views ASP.Net MVC এবং ASP.Net Core MVC অ্যাপ্লিকেশনগুলিতে একটি শক্তিশালী টুল যা model এবং view এর মধ্যে সম্পর্ক স্থাপন করে এবং কোডে টাইপ সেফটি ও কম্পাইল টাইম চেকিং নিশ্চিত করে। Razor সিনট্যাক্সে @model ব্যবহার করে আপনি সহজেই ডাইনামিক ডেটা রেন্ডার করতে পারেন এবং কোডের ভেতরে টাইপ মিসম্যাচের জন্য ভুল কম্পাইলটাইমে ধরতে পারেন। এটি ডেভেলপারদের জন্য কোড আরও পরিষ্কার, সুরক্ষিত এবং রক্ষণাবেক্ষণে সহজ করে তোলে।
Read more