پروژه ASP.Net Core MVC (وب و سی شارپ)
صفحه بتدی و مرتب سازی
بیایید هر یک از این تنظیمات و کلاسها را توضیح دهیم تا بهتر متوجه شوید که چگونه برای صفحهبندی (pagination) استفاده میشوند.
توضیحات تنظیمات:
text-page-size="Items per page:":
متن نمایش داده شده برای انتخاب تعداد آیتمها در هر صفحه را تنظیم میکند. در اینجا، "Items per page:" نمایش داده میشود.
text-total-pages="pages":
متن نمایش داده شده برای تعداد کل صفحات را تنظیم میکند. در اینجا، "pages" نمایش داده میشود.
text-total-records="records":
متن نمایش داده شده برای تعداد کل رکوردها را تنظیم میکند. در اینجا، "records" نمایش داده میشود.
text-first="«":
متن نمایش داده شده برای دکمه اولین صفحه را تنظیم میکند. در اینجا، از کد HTML برای نمایش «« استفاده میشود.
text-last="»":
متن نمایش داده شده برای دکمه آخرین صفحه را تنظیم میکند. در اینجا، از کد HTML برای نمایش »» استفاده میشود.
text-previous="‹":
متن نمایش داده شده برای دکمه صفحه قبلی را تنظیم میکند. در اینجا، از کد HTML برای نمایش ‹ استفاده میشود.
text-next="›":
متن نمایش داده شده برای دکمه صفحه بعدی را تنظیم میکند. در اینجا، از کد HTML برای نمایش › استفاده میشود.
sr-text-first="First":
متن صفحهخوان برای دکمه اولین صفحه را تنظیم میکند. این متن برای دسترسیپذیری (accessibility) استفاده میشود.
sr-text-last="Last":
متن صفحهخوان برای دکمه آخرین صفحه را تنظیم میکند. این متن برای دسترسیپذیری استفاده میشود.
sr-text-previous="Previous":
متن صفحهخوان برای دکمه صفحه قبلی را تنظیم میکند. این متن برای دسترسیپذیری استفاده میشود.
sr-text-next="Next":
متن صفحهخوان برای دکمه صفحه بعدی را تنظیم میکند. این متن برای دسترسیپذیری استفاده میشود.
توضیحات کلاسها:
class="row":
کلاس CSS برای تنظیم طرحبندی به صورت ردیف (row) استفاده میشود.
class-paging-control-div="col":
کلاس CSS برای تنظیم طرحبندی کنترل صفحهبندی به صورت ستون (column) استفاده میشود.
class-info-div="col":
کلاس CSS برای تنظیم طرحبندی بخش اطلاعات به صورت ستون (column) استفاده میشود.
class-page-size-div="col":
کلاس CSS برای تنظیم طرحبندی بخش انتخاب اندازه صفحه به صورت ستون (column) استفاده میشود.
class-paging-control="pagination":
کلاس CSS برای تنظیم طرحبندی کنترل صفحهبندی به صورت استاندارد صفحهبندی استفاده میشود.
class-active-page="disabled":
کلاس CSS برای تنظیم طرحبندی صفحه فعال به صورت غیرفعال (disabled) استفاده میشود.
class-disabled-jumping-button="disabled":
کلاس CSS برای تنظیم طرحبندی دکمههای جهش غیرفعال به صورت غیرفعال (disabled) استفاده میشود.
class-total-pages="badge badge-secondary":
کلاس CSS برای تنظیم طرحبندی تعداد کل صفحات به صورت نشان (badge) و استفاده از کلاسهای badge و badge-secondary استفاده میشود.
class-total-records="badge badge-info":
کلاس CSS برای تنظیم طرحبندی تعداد کل رکوردها به صورت نشان (badge) و استفاده از کلاسهای badge و badge-info استفاده میشود.
نتیجهگیری
این تنظیمات و کلاسها به شما امکان میدهند که صفحهبندی مناسبی ایجاد کنید که نه تنها زیبا به نظر میرسد بلکه دسترسیپذیری (accessibility) مناسبی نیز دارد. این صفحهبندی میتواند به کاربر کمک کند تا به راحتی بین صفحات مختلف ناوبری کند و اطلاعات مورد نیاز خود را پیدا کند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
صفحه بتدی و مرتب سازی
کد @addTagHelper *, LazZiya.TagHelpers در ASP.NET Core برای افزودن یک مجموعه از Tag Helperها استفاده میشود. حالا بیایید به جزئیات و عملکرد این کد نگاهی بیندازیم.
توضیحات کد:
کد: @addTagHelper *, LazZiya.TagHelpers
@addTagHelper:
این دستور برای افزودن Tag Helperها به ویوهای Razor استفاده میشود.
*: این علامت تمام Tag Helperهای موجود در اسمبلی (assembly) مشخص شده را اضافه میکند.
LazZiya.TagHelpers:
این نام اسمبلی است که شامل مجموعهای از Tag Helperها میباشد که شما میخواهید به ویوهای Razor خود اضافه کنید.
Tag Helperها در ASP.NET Core
Tag Helperها
ویژگیهای قدرتمندی هستند که به شما امکان میدهند تگهای HTML را به صورت داینامیک و با استفاده از کدهای C# پردازش کنید. با افزودن Tag Helperها به ویوهای Razor، میتوانید تگهای HTML را بهینهسازی و پردازش کرده و ویژگیهای داینامیکی را به آنها اضافه کنید.
کتابخانه LazZiya.TagHelpers
کتابخانه LazZiya.TagHelpers شامل مجموعهای از Tag Helperهای مفید است که میتوانند در پروژههای ASP.NET Core استفاده شوند. این Tag Helperها میتوانند برای کارهای مختلف مانند صفحهبندی (pagination)، نمایش تاریخ و زمان، فرمها و دیگر عناصر HTML استفاده شوند.
استفاده از Tag Helperها
با افزودن کد @addTagHelper *, LazZiya.TagHelpers به ویوهای Razor، شما میتوانید از تمام Tag Helperهای موجود در اسمبلی LazZiya.TagHelpers استفاده کنید. به عنوان مثال، اگر این کتابخانه شامل Tag Helper برای صفحهبندی باشد، میتوانید تگهای HTML مرتبط با صفحهبندی را به راحتی در ویوهای Razor خود استفاده کنید.
مثال کاربردی:
اگر بخواهید از یک Tag Helper برای صفحهبندی استفاده کنید، کد شما ممکن است به این صورت باشد:
html
@addTagHelper *, LazZiya.TagHelpers
<paging total-records="Model.TotalRow"
page-no="pageNamber==0?1:pageNamber"
page-size="@pagesize==0?1:pagesize"
show-prev-next="true"
show-total-pages="false"
show-total-records="false"
show-page-size-nav="true"
show-first-numbered-page="true"
show-last-numbered-page="true"
query-string-key-page-no="Page"
query-string-key-page-size="PageSize"
query-string-value="@@(Request.QueryString.Value)"
gap-size="2">
</paging>
نتیجهگیری
با افزودن Tag Helperها، میتوانید ویژگیها و قابلیتهای جدیدی را به تگهای HTML خود اضافه کنید و به صورت داینامیک آنها را پردازش کنید. این کد به شما اجازه میدهد که از تمام Tag Helperهای موجود در کتابخانه LazZiya.TagHelpers استفاده کنید و ویوهای خود را بهینهسازی کنید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
صفحه بتدی و مرتب سازی
بیایید این کد را بررسی کنیم و توضیح دهیم که هر بخش آن چه وظیفهای دارد.
اینترفیس IGetProductForSiteService
این اینترفیس شامل یک متد به نام Execute است که برای دریافت محصولات برای سایت استفاده میشود. این متد شامل پارامترهایی است که به شما امکان میدهد نتایج را مرتبسازی و فیلتر کنید.
کد: IGetProductForSiteService
csharp
public interface IGetProductForSiteService
{
ResultDto<ResultProductForSiteDto> Execute(Ordering ordering, string SearchKey, int Page, int PageSize, long? CatId);
}
Ordering ordering: این پارامتر نوع مرتبسازی را مشخص میکند. از نوع Ordering است که شامل انواع مختلف مرتبسازی میشود.
string SearchKey:
این پارامتر کلید جستجو است که برای فیلتر کردن نتایج بر اساس یک کلید واژه استفاده میشود.
int Page:
شماره صفحهای که کاربر میخواهد مشاهده کند.
int PageSize:
تعداد آیتمهایی که باید در هر صفحه نمایش داده شود.
long? CatId:
شناسه دستهبندی (Category ID) که به صورت اختیاری برای فیلتر کردن نتایج بر اساس دستهبندی استفاده میشود.
شمارش Ordering
این شمارش انواع مختلف مرتبسازی را تعریف میکند که میتواند برای ترتیبدهی نتایج استفاده شود.
کد: Ordering
csharp
public enum Ordering
{
NotOrder = 0,
/// <summary>
/// پربازدیدترین
/// </summary>
MostVisited = 1,
/// <summary>
/// پرفروشترین
/// </summary>
Bestselling = 2,
/// <summary>
/// محبوبترین
/// </summary>
MostPopular = 3,
/// <summary>
/// جدیدترین
/// </summary>
theNewest = 4,
/// <summary>
/// ارزانترین
/// </summary>
Cheapest = 5,
/// <summary>
/// گرانترین
/// </summary>
theMostExpensive = 6
}
NotOrder:
بدون مرتبسازی.
MostVisited:
مرتبسازی بر اساس پربازدیدترین محصولات.
Bestselling:
مرتبسازی بر اساس پرفروشترین محصولات.
MostPopular:
مرتبسازی بر اساس محبوبترین محصولات.
theNewest:
مرتبسازی بر اساس جدیدترین محصولات.
Cheapest:
مرتبسازی بر اساس ارزانترین محصولات.
theMostExpensive:
مرتبسازی بر اساس گرانترین محصولات.
نتیجهگیری
این کد به شما امکان میدهد محصولات را بر اساس کلید جستجو، دستهبندی، شماره صفحه و تعداد آیتمها در هر صفحه فیلتر و مرتبسازی کنید. انواع مختلف مرتبسازی مانند پربازدیدترین، پرفروشترین، محبوبترین، جدیدترین، ارزانترین و گرانترین محصولات نیز تعریف شدهاند تا نتایج به صورت دلخواه مرتب شوند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
صفحه بتدی و مرتب سازی
بیایید این بخش از کد کلاس را که از اینترفیس IGetProductForSiteService ارثبری کرده است، بررسی کنیم. این بخش از کد مربوط به مرتبسازی نتایج جستجوی محصولات بر اساس معیارهای مختلف است.
توضیح کد switch(ordering)
ساختار کلی کد:
csharp
switch(ordering)
{
case Ordering.NotOrder:
productQuery = productQuery.OrderByDescending(p => p.Id).AsQueryable();
break;
case Ordering.MostVisited:
productQuery = productQuery.OrderByDescending(p => p.ViewCount).AsQueryable();
break;
case Ordering.Bestselling:
break;
case Ordering.MostPopular:
break;
case Ordering.theNewest:
productQuery = productQuery.OrderByDescending(p => p.Id).AsQueryable();
break;
case Ordering.Cheapest:
productQuery = productQuery.OrderBy(p => p.Price).AsQueryable();
break;
case Ordering.theMostExpensive:
productQuery = productQuery.OrderByDescending(p => p.Price).AsQueryable();
break;
default:
break;
}
توضیح هر مورد:
case Ordering.NotOrder:
این مورد زمانی استفاده میشود که هیچ مرتبسازی خاصی انتخاب نشده باشد.
مرتبسازی بر اساس Id به صورت نزولی (از جدیدترین به قدیمیترین) انجام میشود.
case Ordering.MostVisited:
این مورد زمانی استفاده میشود که مرتبسازی بر اساس پربازدیدترین محصولات انتخاب شده باشد.
مرتبسازی بر اساس تعداد بازدید (ViewCount) به صورت نزولی (از بیشترین بازدید به کمترین) انجام میشود.
case Ordering.Bestselling:
این مورد زمانی استفاده میشود که مرتبسازی بر اساس پرفروشترین محصولات انتخاب شده باشد.
توجه داشته باشید که این مورد هنوز پیادهسازی نشده است.
case Ordering.MostPopular:
این مورد زمانی استفاده میشود که مرتبسازی بر اساس محبوبترین محصولات انتخاب شده باشد.
توجه داشته باشید که این مورد هنوز پیادهسازی نشده است.
case Ordering.theNewest:
این مورد زمانی استفاده میشود که مرتبسازی بر اساس جدیدترین محصولات انتخاب شده باشد.
مرتبسازی بر اساس Id به صورت نزولی (از جدیدترین به قدیمیترین) انجام میشود.
case Ordering.Cheapest:
این مورد زمانی استفاده میشود که مرتبسازی بر اساس ارزانترین محصولات انتخاب شده باشد.
مرتبسازی بر اساس قیمت (Price) به صورت صعودی (از ارزانترین به گرانترین) انجام میشود.
case Ordering.theMostExpensive:
این مورد زمانی استفاده میشود که مرتبسازی بر اساس گرانترین محصولات انتخاب شده باشد.
مرتبسازی بر اساس قیمت (Price) به صورت نزولی (از گرانترین به ارزانترین) انجام میشود.
default:
در صورتی که هیچ یک از موارد بالا تطبیق نداشته باشد، این بخش اجرا میشود.
اینجا هیچ عملیات خاصی انجام نمیشود و کنترل به خارج از switch منتقل میشود.
نتیجهگیری
این بخش از کد برای مرتبسازی نتایج جستجوی محصولات بر اساس معیارهای مختلف استفاده میشود. هر مورد در ساختار switch ترتیب خاصی از محصولات را مشخص میکند و نتایج جستجو را بر اساس آن ترتیب مرتبسازی میکند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
صفحه بتدی و مرتب سازی
بیایید این بخش از کد را با هم بررسی کنیم و توضیح دهیم که هر بخش آن چه وظیفهای دارد.
توضیح کد
این کد یک نوار تب (tab) برای مرتبسازی محصولات بر اساس معیارهای مختلف ایجاد میکند. از تگهای HTML و برخی ویژگیهای خاص برای این منظور استفاده میشود.
کد:
html
<ul class="nav sort-tabs-options" id="myTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" href="~/products?Searchkey=@Context.Request.Query["SearchKey"]&CatId=@Context.Request.Query["CatId"]&ordering=MostVisited" role="tab" aria-controls="Most-visited" aria-selected="true">پربازدیدترین</a>
</li>
<li class="nav-item">
<a class="nav-link" href="~/products?Searchkey=@Context.Request.Query["SearchKey"]&CatId=@Context.Request.Query["CatId"]&ordering=Bestselling" role="tab" aria-controls="Bestselling" aria-selected="false">پرفروشترین</a>
</li>
<li class="nav-item">
<a class="nav-link" href="~/products?Searchkey=@Context.Request.Query["SearchKey"]&CatId=@Context.Request.Query["CatId"]&ordering=Most-Popular" role="tab" aria-controls="Most-Popular" aria-selected="false">محبوبترین</a>
</li>
<li class="nav-item">
<a class="nav-link" href="~/products?Searchkey=@Context.Request.Query["SearchKey"]&CatId=@Context.Request.Query["CatId"]&ordering=newest" role="tab" aria-controls="newest" aria-selected="false">جدیدترین</a>
</li>
<li class="nav-item">
<a class="nav-link" href="~/products?Searchkey=@Context.Request.Query["SearchKey"]&CatId=@Context.Request.Query["CatId"]&ordering=cheapest" role="tab" aria-controls="cheapest" aria-selected="false">ارزانترین</a>
</li>
<li class="nav-item">
<a class="nav-link" href="~/products?Searchkey=@Context.Request.Query["SearchKey"]&CatId=@Context.Request.Query["CatId"]&ordering=most-expensive" role="tab" aria-controls="most-expensive" aria-selected="false">گرانترین</a>
</li>
</ul>
توضیح جزئیات:
تگ <ul>:
class="nav sort-tabs-options":
این کلاسها به نوار تب استایلدهی میکنند. nav معمولاً از فریمورک Bootstrap برای نوار ناوبری استفاده میشود.
id="myTab":
شناسه نوار تب را مشخص میکند.
role="tablist":
این ویژگی به صفحهخوانها و دستگاههای دسترسیپذیری اطلاع میدهد که این عنصر یک لیست از تبها است.
تگهای <li>:
class="nav-item":
این کلاس به هر آیتم تب استایلدهی میکند. nav-item از فریمورک Bootstrap استفاده میشود.
تگهای <a>:
class="nav-link active":
این کلاس به لینکهای تب استایلدهی میکند. nav-link از فریمورک Bootstrap استفاده میشود. active برای تب فعال استفاده میشود.
href="~/products?Searchkey=@Context.Request.Query["SearchKey"]&CatId=@Context.Request.Query["CatId"]&ordering=MostVisited":
آدرس URL مقصد را برای لینک تب مشخص میکند. این URL شامل پارامترهای جستجو و مرتبسازی است که از کوئری استرینگ گرفته شده است.
role="tab":
این ویژگی به صفحهخوانها و دستگاههای دسترسیپذیری اطلاع میدهد که این لینک یک تب است.
aria-controls="Most-visited":
این ویژگی به صفحهخوانها اطلاع میدهد که این تب کدام بخش از محتوا را کنترل میکند.
aria-selected="true/false":
این ویژگی مشخص میکند که آیا این تب در حال حاضر انتخاب شده است یا خیر. true برای تب فعال و false برای تبهای غیرفعال استفاده میشود.
توضیح تبهای مختلف:
پربازدیدترین (MostVisited):
مرتبسازی بر اساس پربازدیدترین محصولات.
آدرس URL مقصد شامل پارامترهای SearchKey، CatId و ordering برای مرتبسازی پربازدیدترین محصولات است.
پرفروشترین (Bestselling):
مرتبسازی بر اساس پرفروشترین محصولات.
آدرس URL مقصد شامل پارامترهای SearchKey، CatId و ordering برای مرتبسازی پرفروشترین محصولات است.
محبوبترین (MostPopular):
مرتبسازی بر اساس محبوبترین محصولات.
آدرس URL مقصد شامل پارامترهای SearchKey، CatId و ordering برای مرتبسازی محبوبترین محصولات است.
جدیدترین (newest):
مرتبسازی بر اساس جدیدترین محصولات.
آدرس URL مقصد شامل پارامترهای SearchKey، CatId و ordering برای مرتبسازی جدیدترین محصولات است.
ارزانترین (cheapest):
مرتبسازی بر اساس ارزانترین محصولات.
آدرس URL مقصد شامل پارامترهای SearchKey، CatId و ordering برای مرتبسازی ارزانترین محصولات است.
گرانترین (most-expensive):
مرتبسازی بر اساس گرانترین محصولات.
پروژه ASP.Net Core MVC (وب و سی شارپ)
صفحه بتدی و مرتب سازی
آدرس URL مقصد شامل پارامترهای SearchKey، CatId و ordering برای مرتبسازی گرانترین محصولات است.
نتیجهگیری
این کد یک نوار تب ایجاد میکند که به کاربران اجازه میدهد محصولات را بر اساس معیارهای مختلف مانند پربازدیدترین، پرفروشترین، محبوبترین، جدیدترین، ارزانترین و گرانترین مرتبسازی کنند. هر تب شامل لینکی است که با کلیک بر روی آن، نتایج محصولات بر اساس معیار مشخص شده مرتبسازی و نمایش داده میشوند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در packing manager console عبارت Add-Migration Test یا هر نامی که قابل فهم باشد و بعد Update-Datab
ودر پک منیجر Add-Migration Add_viewCount و در آخر Update-Database را بزنید
Test_Store 13.zip
حجم:
55.7M
در این بخش صفحه اصلی پویا
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید کد شما را بررسی و توضیح دهیم تا بهتر متوجه شوید که هر بخش آن چه وظیفهای دارد.
توضیح کد
۱. اینترفیس IGetHomePageImagesService
اینترفیس: IGetHomePageImagesService
csharp
public interface IGetHomePageImagesService
{
ResultDto<List<HomePageImagesDto>> Execute();
}
این اینترفیس شامل یک متد Execute است که لیستی از تصاویر صفحه اصلی را برمیگرداند. نوع خروجی این متد ResultDto<List<HomePageImagesDto>> است که نتیجه عملیات را به صورت یک شیء داده انتقالی (DTO) شامل میشود.
۲. کلاس GetHomePageImagesService
کلاس: GetHomePageImagesService
csharp
public class GetHomePageImagesService : IGetHomePageImagesService
{
private readonly IDataBaseContext _context;
public GetHomePageImagesService(IDataBaseContext context)
{
_context = context;
}
public ResultDto<List<HomePageImagesDto>> Execute()
{
var images = _context.HomePageImages.OrderByDescending(p => p.Id)
.Select(p => new HomePageImagesDto
{
Id = p.Id,
ImageLocation = p.ImageLocation,
Link = p.link,
Src = p.Src,
}).ToList();
return new ResultDto<List<HomePageImagesDto>>()
{
Data = images,
IsSuccess = true,
};
}
}
این کلاس پیادهسازی اینترفیس IGetHomePageImagesService است و شامل متد Execute میباشد. این متد به صورت زیر کار میکند:
دسترسی به پایگاه داده: از طریق _context به جدول HomePageImages دسترسی پیدا میکند.
مرتبسازی: لیست تصاویر را بر اساس Id به صورت نزولی مرتب میکند.
انتخاب دادهها: دادههای مورد نیاز (مانند Id, ImageLocation, Link, Src) را از پایگاه داده انتخاب میکند و آنها را به صورت لیستی از HomePageImagesDto برمیگرداند.
بازگرداندن نتیجه: نتیجه عملیات را به صورت شیء ResultDto که شامل لیستی از HomePageImagesDto و وضعیت موفقیت عملیات است، برمیگرداند.
۳. کلاس HomePageImagesDto
کلاس: HomePageImagesDto
csharp
public class HomePageImagesDto
{
public long Id { get; set; }
public string Src { get; set; }
public string Link { get; set; }
public ImageLocation ImageLocation { get; set; }
}
این کلاس یک DTO (دادهانتقالی) است که شامل اطلاعات مربوط به تصاویر صفحه اصلی میباشد:
Id:
شناسه تصویر.
Src:
مسیر فایل تصویر.
Link:
لینک مرتبط با تصویر.
ImageLocation:
محل قرارگیری تصویر.
نتیجهگیری
این کد به شما امکان میدهد لیستی از تصاویر صفحه اصلی را از پایگاه داده دریافت کنید و به صورت یک شیء دادهانتقالی (DTO) بازگردانید. این روش ساختاریافته و ماژولار به شما کمک میکند تا دادهها را به صورت مرتب و بهینه پردازش کنید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید این کد را بررسی کنیم و توضیح دهیم که هر بخش آن چه وظیفهای دارد.
توضیح کد
۱. اینترفیس IGetSliderService
اینترفیس: IGetSliderService
csharp
public interface IGetSliderService
{
ResultDto<List<SliderDto>> Execute();
}
این اینترفیس شامل یک متد Execute است که لیستی از اسلایدرها را برمیگرداند. نوع خروجی این متد ResultDto<List<SliderDto>> است که نتیجه عملیات را به صورت یک شیء داده انتقالی (DTO) شامل میشود.
۲. کلاس GetSliderService
کلاس: GetSliderService
csharp
public class GetSliderService : IGetSliderService
{
private readonly IDataBaseContext _context;
public GetSliderService(IDataBaseContext context)
{
_context = context;
}
public ResultDto<List<SliderDto>> Execute()
{
var sliders = _context.Sliders.OrderByDescending(p => p.Id).ToList().Select(
p => new SliderDto
{
Link = p.link,
Src = p.Src,
}).ToList();
return new ResultDto<List<SliderDto>>()
{
Data = sliders,
IsSuccess = true,
};
}
}
این کلاس پیادهسازی اینترفیس IGetSliderService است و شامل متد Execute میباشد. این متد به صورت زیر کار میکند:
دسترسی به پایگاه داده: از طریق _context به جدول Sliders دسترسی پیدا میکند.
مرتبسازی و تبدیل دادهها: لیست اسلایدرها را بر اساس Id به صورت نزولی مرتب میکند. سپس دادههای مورد نیاز (مانند Link و Src) را از پایگاه داده انتخاب میکند و آنها را به صورت لیستی از SliderDto برمیگرداند.
بازگرداندن نتیجه: نتیجه عملیات را به صورت شیء ResultDto که شامل لیستی از SliderDto و وضعیت موفقیت عملیات است، برمیگرداند.
۳. کلاس SliderDto
کلاس: SliderDto
csharp
public class SliderDto
{
public string Src { get; set; }
public string Link { get; set; }
}
این کلاس یک DTO (دادهانتقالی) است که شامل اطلاعات مربوط به اسلایدرها میباشد:
Src:
مسیر فایل تصویر.
Link:
لینک مرتبط با تصویر.
نتیجهگیری
این کد به شما امکان میدهد لیستی از اسلایدرها را از پایگاه داده دریافت کنید و به صورت یک شیء دادهانتقالی (DTO) بازگردانید. این روش ساختاریافته و ماژولار به شما کمک میکند تا دادهها را به صورت مرتب و بهینه پردازش کنید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید این کد را بررسی کنیم و توضیح دهیم که هر بخش آن چه وظیفهای دارد.
توضیح کد
۱. اینترفیس IAddHomePageImagesService
اینترفیس: IAddHomePageImagesService
csharp
public interface IAddHomePageImagesService
{
ResultDto Execute(requestAddHomePageImagesDto request);
}
این اینترفیس شامل یک متد Execute است که درخواست افزودن یک تصویر به صفحه اصلی را میگیرد. نوع ورودی این متد یک شیء از نوع requestAddHomePageImagesDto است و نوع خروجی آن یک شیء از نوع ResultDto است که نتیجه عملیات را شامل میشود.
۲. کلاس AddHomePageImagesService
کلاس: AddHomePageImagesService
csharp
public class AddHomePageImagesService : IAddHomePageImagesService
{
private readonly IDataBaseContext _context;
private readonly IHostingEnvironment _environment;
public AddHomePageImagesService(IDataBaseContext context, IHostingEnvironment hosting)
{
_context = context;
_environment = hosting;
}
public ResultDto Execute(requestAddHomePageImagesDto request)
{
var resultUpload = UploadFile(request.file);
HomePageImages homePageImages = new HomePageImages()
{
link = request.Link,
Src = resultUpload.FileNameAddress,
ImageLocation = request.ImageLocation,
};
_context.HomePageImages.Add(homePageImages);
_context.SaveChanges();
return new ResultDto()
{
IsSuccess = true,
};
}
private UploadDto UploadFile(IFormFile file)
{
if (file != null)
{
string folder = $@"images\HomePages\Slider\";
var uploadsRootFolder = Path.Combine(_environment.WebRootPath, folder);
if (!Directory.Exists(uploadsRootFolder))
{
Directory.CreateDirectory(uploadsRootFolder);
}
if (file == null || file.Length == 0)
{
return new UploadDto()
{
Status = false,
FileNameAddress = "",
};
}
string fileName = DateTime.Now.Ticks.ToString() + file.FileName;
var filePath = Path.Combine(uploadsRootFolder, fileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
file.CopyTo(fileStream);
}
return new UploadDto()
{
FileNameAddress = folder + fileName,
Status = true,
};
}
return null;
}
}
این کلاس پیادهسازی اینترفیس IAddHomePageImagesService است و شامل متد Execute میباشد. این متد به صورت زیر کار میکند:
دسترسی به پایگاه داده و محیط هاست: از طریق _context به پایگاه داده و از طریق _environment به محیط هاست دسترسی پیدا میکند.
آپلود فایل تصویر: متد UploadFile فایل تصویری را که از ورودی دریافت کرده، آپلود میکند.
ایجاد شیء HomePageImages: با استفاده از دادههای ورودی و نتیجه آپلود فایل، یک شیء HomePageImages ایجاد میکند.
افزودن تصویر به پایگاه داده: تصویر را به جدول HomePageImages در پایگاه داده اضافه میکند و تغییرات را ذخیره میکند.
بازگرداندن نتیجه: نتیجه عملیات را به صورت شیء ResultDto که شامل وضعیت موفقیت عملیات است، برمیگرداند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
۳. متد UploadFile
متد: UploadFile
csharp
private UploadDto UploadFile(IFormFile file)
{
if (file != null)
{
string folder = $@"images\HomePages\Slider\";
var uploadsRootFolder = Path.Combine(_environment.WebRootPath, folder);
if (!Directory.Exists(uploadsRootFolder))
{
Directory.CreateDirectory(uploadsRootFolder);
}
if (file == null || file.Length == 0)
{
return new UploadDto()
{
Status = false,
FileNameAddress = "",
};
}
string fileName = DateTime.Now.Ticks.ToString() + file.FileName;
var filePath = Path.Combine(uploadsRootFolder, fileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
file.CopyTo(fileStream);
}
return new UploadDto()
{
FileNameAddress = folder + fileName,
Status = true,
};
}
return null;
}
این متد وظیفه آپلود فایل تصویری را بر عهده دارد:
ایجاد پوشه برای ذخیره تصاویر: اگر پوشه مورد نظر وجود نداشته باشد، آن را ایجاد میکند.
بررسی فایل ورودی: بررسی میکند که فایل ورودی معتبر باشد و اندازه آن صفر نباشد.
ایجاد نام منحصر به فرد برای فایل: نام فایل را با استفاده از زمان جاری و نام اصلی فایل ایجاد میکند.
ذخیره فایل در پوشه: فایل را در مسیر مشخص شده ذخیره میکند.
بازگرداندن نتیجه آپلود: نتیجه آپلود را به صورت شیء UploadDto که شامل مسیر فایل ذخیره شده و وضعیت موفقیت عملیات است، برمیگرداند.
۴. کلاس requestAddHomePageImagesDto
کلاس: requestAddHomePageImagesDto
csharp
public class requestAddHomePageImagesDto
{
public IFormFile file { get; set; }
public string Link { get; set; }
public ImageLocation ImageLocation { get; set; }
}
این کلاس یک DTO (دادهانتقالی) است که شامل اطلاعات مربوط به درخواست افزودن یک تصویر به صفحه اصلی میباشد:
file:
فایل تصویر.
Link:
لینک مرتبط با تصویر.
ImageLocation:
محل قرارگیری تصویر.
نتیجهگیری
این کد به شما امکان میدهد که یک تصویر را به صفحه اصلی اضافه کنید و اطلاعات مربوط به آن را در پایگاه داده ذخیره کنید. این روش ساختاریافته و ماژولار به شما کمک میکند تا عملیات افزودن تصاویر را به صورت مرتب و بهینه انجام دهید.