کدهای یک view را برسی می کنیم
@model IEnumerable<WebApplication4.Models.Entities.Users>
@{
ViewData["Title"] = "Index";
}
<h1>Index</h1>
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Id)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Age)
</th>
<th>
@Html.DisplayNameFor(model => model.Phone)
</th>
<th>
@Html.DisplayNameFor(model => model.Mobile)
</th>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Age)
</td>
<td>
@Html.DisplayFor(modelItem => item.Phone)
</td>
<td>
@Html.DisplayFor(modelItem => item.Mobile)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
</tbody>
</table>
توضیحات:
@model IEnumerable<WebApplication4.Models.Entities.Users>:
این خط مشخص میکند که مدل ویو یک لیست از کاربران (Users) است.
@{ ViewData["Title"] = "Index"; }:
این خط عنوان صفحه را به "Index" تنظیم میکند.
<h1>Index</h1>:
این خط عنوان صفحه را در یک عنصر <h1> نمایش میدهد.
<a asp-action="Create">Create New</a>:
این خط یک لینک ایجاد میکند که به اکشن Create هدایت میشود.
<table class="table">:
این خط یک جدول HTML با کلاس CSS "table" ایجاد میکند.
<thead>...</thead>:
این بخش شامل سرستونهای جدول است. برای هر خاصیت از مدل (Id, Name, Age, Phone, Mobile, Email) یک سرستون ایجاد میشود.
<tbody>...</tbody>:
این بخش شامل بدنه جدول است که برای هر کاربر در مدل، یک ردیف (<tr>) ایجاد میکند.
@foreach (var item in Model) { ... }:
این حلقه foreach برای هر کاربر در مدل یک ردیف جدول ایجاد میکند.
@Html.DisplayFor(modelItem => item.Property):
این متد مقدار هر خاصیت (Id, Name, Age, Phone, Mobile, Email) را در سلولهای جدول نمایش میدهد.
@Html.ActionLink("Edit", "Edit", new { id = item.Id }):
این لینک به اکشن Edit با شناسه (id) کاربر مورد نظر هدایت میشود.
@Html.ActionLink("Details", "Details", new { id = item.Id }):
این لینک به اکشن Details با شناسه (id) کاربر مورد نظر هدایت میشود.
@Html.ActionLink("Delete", "Delete", new { id = item.Id }):
این لینک به اکشن Delete با شناسه (id) کاربر مورد نظر هدایت میشود.
این کد به شما یک لیست از کاربران را در یک جدول HTML نمایش میدهد، با قابلیت ایجاد، ویرایش، مشاهده جزئیات و حذف هر کاربر.
بیایید کدهای کنترلر ScaffoldingUserController را بررسی کنیم تا بفهمیم هر بخش چه کاری انجام میدهد.
کلیات:
این کنترلر از Controller ارثبری میکند و شامل اکشنهایی برای عملیاتهای CRUD (ایجاد، خواندن، بهروزرسانی، حذف) برای مدل User است.
UserRepository برای دسترسی به دادههای User استفاده میشود.
کد کامل:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WebApplication4.Models.Repositories;
namespace WebApplication4.Controllers
{
public class ScaffoldingUserController : Controller
{
private readonly UserRepository _userRepository;
public ScaffoldingUserController()
{
_userRepository = new UserRepository();
}
// GET: ScaffoldingUserController
public ActionResult Index()
{
return View(_userRepository.Get());
}
// GET: ScaffoldingUserController/Details/5
public ActionResult Details(int id)
{
return View(_userRepository.Find());
}
// GET: ScaffoldingUserController/Create
public ActionResult Create()
{
return View();
}
// POST: ScaffoldingUserController/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(IFormCollection collection)
{
try
{
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
// GET: ScaffoldingUserController/Edit/5
public ActionResult Edit(int id)
{
return View(_userRepository.Find());
}
// POST: ScaffoldingUserController/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int id, IFormCollection collection)
{
try
{
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
// GET: ScaffoldingUserController/Delete/5
public ActionResult Delete(int id)
{
return View(_userRepository.Find());
}
// POST: ScaffoldingUserController/Delete/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id, IFormCollection collection)
{
try
{
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
}
}
جزئیات اکشنها:
Index:
روش HTTP: GET
توضیحات: این اکشن لیستی از کاربران را از _userRepository.Get() میگیرد و به ویو میفرستد.
Details:
روش HTTP: GET
توضیحات: این اکشن جزئیات یک کاربر خاص را با id از _userRepository.Find() میگیرد و به ویو میفرستد.
Create (GET):
روش HTTP: GET
توضیحات: این اکشن ویوی ایجاد یک کاربر جدید را برمیگرداند.
Create (POST):
روش HTTP: POST
توضیحات: این اکشن دادههای ارسال شده از فرم را دریافت میکند و تلاش میکند تا کاربر جدیدی ایجاد کند. اگر موفقیتآمیز باشد، به اکشن Index هدایت میشود، در غیر این صورت، ویوی ایجاد را دوباره نمایش میدهد.
Edit (GET):
روش HTTP: GET
توضیحات: این اکشن جزئیات یک کاربر خاص را با id از _userRepository.Find() میگیرد و به ویو برای ویرایش میفرستد.
Edit (POST):
روش HTTP: POST
توضیحات: این اکشن دادههای ارسال شده از فرم ویرایش را دریافت میکند و تلاش میکند تا اطلاعات کاربر را بهروزرسانی کند. اگر موفقیتآمیز باشد، به اکشن Index هدایت میشود، در غیر این صورت، ویوی ویرایش را دوباره نمایش میدهد.
Delete (GET):
روش HTTP: GET
توضیحات: این اکشن جزئیات یک کاربر خاص را با id از _userRepository.Find() میگیرد و به ویو برای حذف میفرستد.
Delete (POST):
روش HTTP: POST
توضیحات: این اکشن دادههای ارسال شده از فرم حذف را دریافت میکند و تلاش میکند تا کاربر را حذف کند. اگر موفقیتآمیز باشد، به اکشن Index هدایت میشود، در غیر این صورت، ویوی حذف را دوباره نمایش میدهد.
نکات:
برای هر اکشن POST، از [HttpPost] و [ValidateAntiForgeryToken] استفاده شده است تا اطمینان حاصل شود که درخواستها از منابع معتبری ارسال شدهاند و امنیت فرمها حفظ میشود.
UserRepository به عنوان یک منبع داده برای دسترسی به کاربران استفاده شده است.
در ASP.NET Core MVC، ویوها (Views) برای نمایش اطلاعات به کاربر استفاده میشوند. برای ایجاد و مدیریت ویوها در کنترلر، میتوانید از اکشنهای مختلف استفاده کنید که هر کدام ویوهای متفاوتی را نمایش میدهند.
مراحل ایجاد و مدیریت ویوها در کنترلر:
ایجاد ویوها:
ویوهای خود را در پوشه Views ایجاد کنید. نام پوشه باید مطابق با نام کنترلر باشد (بدون پسوند "Controller").
ویوها معمولاً با پسوند .cshtml ایجاد میشوند.
تعریف اکشنها در کنترلر:
اکشنهایی را در کنترلر تعریف کنید که ویوهای مختلف را برمیگردانند.
مثال:
فرض کنید یک کنترلر به نام HomeController دارید و میخواهید چند ویو مختلف برای نمایش اطلاعات مختلف ایجاد کنید.
کنترلر (HomeController.cs):
public class HomeController : Controller
{
// اکشن برای ویوی Index
public IActionResult Index()
{
return View();
}
// اکشن برای ویوی About
public IActionResult About()
{
return View();
}
// اکشن برای ویوی Contact
public IActionResult Contact()
{
return View();
}
}
ویوها:
ویوی Index (Views/Home/Index.cshtml):
@model YourNamespace.Models.SomeModel
<h1>صفحه اصلی</h1>
<p>این محتوای صفحه اصلی است.</p>
ویوی About (Views/Home/About.cshtml):
<h1>درباره ما</h1>
<p>این محتوای صفحه درباره ما است.</p>
ویوی Contact (Views/Home/Contact.cshtml):
<h1>تماس با ما</h1>
<p>این محتوای صفحه تماس با ما است.</p>
توضیحات:
Index: اکشنی است که ویوی Index را برمیگرداند. ویوی مربوطه در پوشه Views/Home/Index.cshtml قرار دارد.
About: اکشنی است که ویوی About را برمیگرداند. ویوی مربوطه در پوشه Views/Home/About.cshtml قرار دارد.
Contact: اکشنی است که ویوی Contact را برمیگرداند. ویوی مربوطه در پوشه Views/Home/Contact.cshtml قرار دارد.
با این روش، میتوانید چندین ویو را با اکشنهای مختلف در یک کنترلر مدیریت کنید. هر اکشن یک ویوی خاص را برمیگرداند که محتوای مربوط به آن اکشن را نمایش میدهد.
برای ساخت یک کنترلر در ASP.NET Core MVC که شامل عملیات CRUD (ایجاد، خواندن، بهروزرسانی و حذف) برای موجودیتی با فیلدهای Id, Name, Age, Mobile و Email باشد، نیاز به ایجاد چند View دارید. در اینجا یک راهنمایی کلی برای ایجاد این Views و کنترلر آورده شده است:
مدل (Model):
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
}
کنترلر (Controller):
public class PersonsController : Controller
{
private readonly ApplicationDbContext _context;
public PersonsController(ApplicationDbContext context)
{
_context = context;
}
// GET: Persons
public async Task<IActionResult> Index()
{
return View(await _context.Persons.ToListAsync());
}
// GET: Persons/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var person = await _context.Persons
.FirstOrDefaultAsync(m => m.Id == id);
if (person == null)
{
return NotFound();
}
return View(person);
}
// GET: Persons/Create
public IActionResult Create()
{
return View();
}
// POST: Persons/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Name,Age,Mobile,Email")] Person person)
{
if (ModelState.IsValid)
{
_context.Add(person);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(person);
}
// GET: Persons/Edit/5
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var person = await _context.Persons.FindAsync(id);
if (person == null)
{
return NotFound();
}
return View(person);
}
// POST: Persons/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,Name,Age,Mobile,Email")] Person person)
{
if (id != person.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
_context.Update(person);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!PersonExists(person.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(person);
}
// GET: Persons/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var person = await _context.Persons
.FirstOrDefaultAsync(m => m.Id == id);
if (person == null)
{
return NotFound();
}
return View(person);
}
// POST: Persons/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var person = await _context.Persons.FindAsync(id);
_context.Persons.Remove(person);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
private bool PersonExists(int id)
{
return _context.Persons.Any(e => e.Id == id);
}
}
ویوها (Views):
Index.cshtml:
لیست اشخاص
Details.cshtml:
نمایش جزئیات یک شخص
Create.cshtml:
فرم ایجاد یک شخص جدید
Edit.cshtml:
فرم ویرایش یک شخص
Delete.cshtml:
فرم تأیید حذف یک شخص
بیایید ادامهی کدهای ویو را با هم بررسی کنیم تا کامل شوند:
Viewها:
Index.cshtml
این فایل لیست تمامی اشخاص را نمایش میدهد:
@model IEnumerable<Person>
@{
ViewData["Title"] = "Persons List";
}
<h2>Persons List</h2>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Mobile</th>
<th>Email</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Name</td>
<td>@item.Age</td>
<td>@item.Mobile</td>
<td>@item.Email</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
<a asp-action="Create">Create New Person</a>
Details.cshtml
این فایل جزئیات یک شخص خاص را نمایش میدهد:
@model Person
@{
ViewData["Title"] = "Person Details";
}
<h2>Person Details</h2>
<div>
<h4>Person</h4>
<hr />
<dl class="row">
<dt class = "col-sm-2">Name</dt>
<dd class = "col-sm-10">@Model.Name</dd>
<dt class = "col-sm-2">Age</dt>
<dd class = "col-sm-10">@Model.Age</dd>
<dt class = "col-sm-2">Mobile</dt>
<dd class = "col-sm-10">@Model.Mobile</dd>
<dt class = "col-sm-2">Email</dt>
<dd class = "col-sm-10">@Model.Email</dd>
</dl>
</div>
<div>
<a asp-action="Edit" asp-route-id="@Model.Id">Edit</a> |
<a asp-action="Index">Back to List</a>
</div>
Create.cshtml
این فایل فرم ایجاد یک شخص جدید را نمایش میدهد:
@model Person
@{
ViewData["Title"] = "Create Person";
}
<h2>Create Person</h2>
<h4>Person</h4>
<hr />
<form asp-action="Create">
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
<span asp-validation-for="Age" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Mobile" class="control-label"></label>
<input asp-for="Mobile" class="form-control" />
<span asp-validation-for="Mobile" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
Edit.cshtml
این فایل فرم ویرایش یک شخص موجود را نمایش میدهد:
@model Person
@{
ViewData["Title"] = "Edit Person";
}
<h2>Edit Person</h2>
<h4>Person</h4>
<hr />
<form asp-action="Edit">
<div class="form-group">
<input type="hidden" asp-for="Id" />
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
<span asp-validation-for="Age" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Mobile" class="control-label"></label>
<input asp-for="Mobile" class="form-control" />
<span asp-validation-for="Mobile" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
Delete.cshtml
این فایل فرم تأیید حذف یک شخص را نمایش میدهد:
@model Person
@{
ViewData["Title"] = "Delete Person";
}
<h2>Delete Person</h2>
<h4>Person</h4>
<hr />
<dl class="row">
<dt class = "col-sm-2">Name</dt>
<dd class = "col-sm-10">@Model.Name</dd>
<dt class = "col-sm-2">Age</dt>
<dd class = "col-sm-10">@Model.Age</dd>
<dt class = "col-sm-2">Mobile</dt>
<dd class = "col-sm-10">@Model.Mobile</dd>
<dt class = "col-sm-2">Email</dt>
<dd class = "col-sm-10">@Model.Email</dd>
</dl>
<form asp-action="Delete">
<input type="hidden" asp-for="Id" />
<input type="submit" value="Delete" class="btn btn-danger" /> |
<a asp-action="Index">Back to List</a>
</form>
به این ترتیب میتوانید کنترلر و ویوهای مورد نیاز برای عملیات CRUD را در ASP.NET Core MVC ایجاد کنید.
WebApplication4.zip
حجم:
18.3M
پروژه Scaffolding
آدرس اکشن
localhost:28987/scaffoldinguser
شخصیسازی کدهای ایجاد شده توسط Scaffolding و آشنایی با T4 Templates.
شخصیسازی کدهای ایجاد شده توسط Scaffolding
برای شخصیسازی کدهایی که توسط Scaffolding تولید میشوند، میتوانید از تغییرات در الگوهای پیشفرض استفاده کنید. Scaffolding کدهای ابتدایی برای عملیاتهای CRUD و سایر کدهای مورد نیاز را به صورت خودکار ایجاد میکند، اما شما میتوانید این الگوها را تغییر دهید یا الگوهای خود را اضافه کنید تا به نیازهای خاص پروژهتان بپردازید.
مراحل شخصیسازی:
نصب پکیجهای مورد نیاز: ابتدا باید ابزارهای لازم برای Scaffolding را نصب کنید.
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
اجرای دستور Scaffolding: اجرای دستور Scaffolding برای ایجاد کنترلر، ویو و سایر موارد مورد نیاز.
dotnet aspnet-codegenerator controller -name ProductsController -m Product -dc ApplicationDbContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
شخصیسازی کدها: بعد از ایجاد کدها توسط Scaffolding، شما میتوانید کدها را به صورت دستی شخصیسازی کنید. به عنوان مثال، میتوانید فیلدهای اضافی اضافه کنید، نام کلاسها را تغییر دهید، روشهای اعتبارسنجی خاص خود را پیادهسازی کنید و غیره.
T4 Templates چیست؟
T4 (Text Template Transformation Toolkit)
یک موتور تولید کد در ویژوال استودیو است که به شما امکان میدهد فایلهای متنی (مثل کدهای C#, HTML, XML و ...) را به صورت پویا تولید کنید. T4 Templates میتوانند برای تولید کدهای پویای پیچیده و شخصیسازی الگوهای Scaffolding استفاده شوند.
استفاده از T4 Templates:
ایجاد یک T4 Template: برای ایجاد یک T4 Template، باید یک فایل با پسوند .tt ایجاد کنید.
نمونه T4 Template:
// MyTemplate.tt
<#@ template language="C#" #>
<#@ output extension=".cs" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Text" #>
namespace GeneratedCode
{
public class GeneratedClass
{
public string GeneratedProperty { get; set; }
}
}
تولید کد با T4 Template: بعد از ذخیره فایل .tt، ویژوال استودیو به صورت خودکار کد تولید شده را ایجاد میکند. شما میتوانید از این کدهای تولید شده در پروژه خود استفاده کنید.
شخصیسازی T4 Templates برای Scaffolding: برای شخصیسازی Scaffolding با استفاده از T4 Templates، میتوانید الگوهای Scaffolding پیشفرض را تغییر دهید یا الگوهای جدیدی ایجاد کنید.
نتیجه:
با استفاده از T4 Templates، میتوانید کدهای تولید شده را به صورت پویا و براساس نیازهای پروژهتان شخصیسازی کنید. این کار به شما امکان میدهد تا الگوهای Scaffolding را تغییر دهید و بهبود بخشید.
در ASP.NET Core MVC، Binding یا اتصال دادهها فرآیندی است که طی آن دادههای ورودی از درخواست HTTP به پارامترهای اکشن کنترلر یا مدلهای دادهای تبدیل میشوند. این فرآیند به شما امکان میدهد تا دادهها را به راحتی از فرمهای HTML، درخواستهای URL و سایر منابع به مدلهای C# در سرور بفرستید و آنها را پردازش کنید.
انواع Binding:
Model Binding: Model Binding
دادههای ورودی را به پارامترهای اکشن کنترلر یا مدلها تبدیل میکند. این فرآیند شامل تبدیل دادهها از انواع مختلف (مثل رشتهها، اعداد، و غیره) به انواع دادهای مدلهای C# است.
public IActionResult Create(User user)
{
if (ModelState.IsValid)
{
// پردازش دادههای کاربر
}
return View(user);
}
Parameter Binding:
میتوانید دادهها را به صورت مستقیم به پارامترهای اکشن متصل کنید.
public IActionResult Details(int id)
{
// دریافت اطلاعات کاربر با استفاده از شناسه
var user = _userRepository.Find(id);
return View(user);
}
Form Binding:
دادههای ارسال شده از فرمها به پارامترهای اکشن یا مدلها متصل میشوند.
<form asp-action="Create" method="post">
<input type="text" name="UserName" />
<input type="text" name="Email" />
<button type="submit">ثبت نام</button>
</form>
نحوه کار Model Binding:
1-نامها و مقادیر: Model Binding با استفاده از نامهای فیلدها در فرم، دادهها را از درخواستها استخراج میکند و آنها را به مدل یا پارامترهای اکشن متصل میکند.
2-نوع دادهها: Model Binding دادهها را به نوعهای مناسب تبدیل میکند (مثلاً از رشته به عدد صحیح).
3-خطایابی: اگر دادهها قابل تبدیل نباشند یا خطای دیگری در اتصال وجود داشته باشد، خطاها در ModelState ثبت میشوند.
مثال کامل:
فرض کنید یک مدل کاربر و یک فرم HTML برای ثبتنام کاربر دارید:
مدل (User.cs):
public class User
{
public string UserName { get; set; }
public string Email { get; set; }
}
ویو (Register.cshtml):
@model YourNamespace.Models.User
<form asp-action="Register" method="post">
<div>
<label asp-for="UserName"></label>
<input asp-for="UserName" />
</div>
<div>
<label asp-for="Email"></label>
<input asp-for="Email" />
</div>
<button type="submit">ثبت نام</button>
</form>
کنترلر (UserController.cs):
public class UserController : Controller
{
[HttpPost]
public IActionResult Register(User user)
{
if (ModelState.IsValid)
{
// پردازش دادههای کاربر
TempData["Message"] = "ثبتنام موفقیتآمیز بود!";
return RedirectToAction("Index");
}
return View(user);
}
}
در این مثال:
دادههای فرم HTML به مدل User متصل میشوند.
متد Register در کنترلر دادههای متصل شده را دریافت میکند و اگر دادهها معتبر باشند، آنها را پردازش میکند.
با استفاده از Binding، میتوانید به راحتی دادههای ورودی را به مدلهای C# تبدیل کنید و آنها را پردازش کنید، که این فرآیند توسعه برنامههای وب را سادهتر و کارآمدتر میکند.
var searchKey = HttpContext.Request.Query["searchkey"].ToString();
این خط کد در زبان برنامهنویسی C# و در چارچوب ASP.NET Core استفاده میشود و به دنبال مقدار یک پارامتر کوئری (query parameter) به نام "searchkey" در درخواست HTTP جاری است. این پارامتر میتواند در URL درخواست وجود داشته باشد. بیایید این را به صورت جزئیتر بررسی کنیم:
اجزای کد:
HttpContext:
HttpContext شامل اطلاعات مربوط به درخواست جاری HTTP و پاسخ مرتبط با آن است.
این شیء در یک کنترلر ASP.NET Core به صورت پیشفرض در دسترس است.
Request:
Request شامل اطلاعاتی درباره درخواست جاری، از جمله هدرها، کوئری استرینگها، فرمها، و غیره است.
Query:
Query یک مجموعه است که شامل تمام پارامترهای کوئری (query parameters) از URL درخواست جاری است. این پارامترها معمولاً پس از ? در URL قرار میگیرند.
به عنوان مثال، در URL https://example.com?searchkey=value، searchkey یک پارامتر کوئری است.
["searchkey"]:
این قسمت به دنبال یک پارامتر کوئری به نام "searchkey" در مجموعه کوئریها میگردد. اگر پارامتر "searchkey" وجود داشته باشد، مقدار آن برگردانده میشود.
ToString():
ToString() مقدار یافت شده را به رشته تبدیل میکند.
مثال:
فرض کنید شما یک URL به صورت زیر دارید:
https://example.com?searchkey=mysearchterm
در کد بالا:
HttpContext.Request.Query["searchkey"] مقدار mysearchterm را برمیگرداند.
ToString() اطمینان میدهد که مقدار به صورت رشته (string) استفاده میشود.
استفاده در اکشن کنترلر:
یک مثال کاربردی از این کد در یک اکشن کنترلر میتواند به صورت زیر باشد:
public IActionResult Search()
{
var searchKey = HttpContext.Request.Query["searchkey"].ToString();
// استفاده از searchKey برای جستجو در پایگاه داده یا منطق دیگر
var results = _searchService.Search(searchKey);
return View(results);
}
در این مثال، مقدار searchkey از URL خوانده شده و برای انجام عملیات جستجو استفاده میشود.