آرشیو بندی مطالب در MVC

در این مقاله قصد داریم نحوه آرشیو بندی مطالب سایت به صورت ماهیانه را به شما آموزش دهیم .

آرشیو بندی مطالب در MVC

ابتدا یک بانک اطلاعاتی با نام ArchiveArticle_DB_MVC ایجاد میکنیم

یک جدول با نام Articles ایجاد میکنیم

اسکریپت ساخت جدول :

USE [ArchiveArticle_DB_MVC]
GO
/****** Object:  Table [dbo].[Articles]    Script Date: 08/10/2015 09:33:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Articles](
	[ArticleID] [int] IDENTITY(1,1) NOT NULL,
	[Title] [nvarchar](150) NOT NULL,
	[Text] [nvarchar](max) NOT NULL,
	[Date] [date] NOT NULL,
 CONSTRAINT [PK_Articles] PRIMARY KEY CLUSTERED 
(
	[ArticleID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Articles] ON
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (1, N'نحوه ایجاد TreeView در ASP.Net با استفاده از بانک اطلاعاتی SQL ', N'در این مقاله بررسی خواهیم کرد که چگونه در ASP.Net و با استفاده از جدول های بانک اطلاعاتی SQL یک TreeView ایجاد کنیم. ', CAST(0x0E3A0B00 AS Date))
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (2, N'نمایش طرفداران شما در شبکه های اجتماعی', N'در این آموزش ما قصد داریم تا به شما یک پلاگین ساده رو آموزش بدیم که میتونید با استفاده از این تعداد طرفداران خود را در شبکه های اجتماعی را مشاهده کنید. ', CAST(0x0E3A0B00 AS Date))
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (3, N'اضافه کردن دکمه Google +1 به وب سایت ', N'در این مقاله قصد داریم با بارگذاری دکمه ی g+1 سرعت بارگذاری صفحه ی وب را بالا برده و قابلیت ریسپانسیو را افزایش دهیم. ', CAST(0x2C3A0B00 AS Date))
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (5, N'معرفی Serializer در Net.', N'در این مقاله می خواهیم با فرایند Serialization و de-serialization آشنا شویم و چندین Serializer را از جهت سرعت و طول رشته تولیدشده مقایسه کنیم. ', CAST(0x2C3A0B00 AS Date))
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (6, N'دانلود فایل از GridView در ASP.Net', N'     در این مقاله بررسی خواهیم کرد که چگونه در ASP.Net از یک GridView، بتوانیم یک فایل را دانلود و آپلود کنیم. ', CAST(0x2C3A0B00 AS Date))
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (7, N'قالب فارسی overlay به صورت HTMl', N'قالب شخصی overlay یک قالب حرفه ای و زیبا برای طراحان و کاربران اینترنت است که توسط سایت ThemeForest طراحی و عرضه شده است و از جدیدترین کارهای این سایت محسوب می شود. این قالب شخصی دارای قسمت معرفی به همراه آیکون های شبکه های اجتماعی ، بخش درباره ما که حاوی نحوه کار و توضیحات درباره انجام کارها است.', CAST(0x2C3A0B00 AS Date))
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (8, N'کار با Area در MVC', N'     از MVC 2 به بعد شرکت مایکروسافت ویژگی های جدیدی در برنامه های MVC به نام Area فراهم نموده است. در این مقاله این ویژگی را بررسی خواهیم کرد. ', CAST(0x2C3A0B00 AS Date))
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (9, N'استفاده از Session در View در MVC', N'     در این مقاله نحوه فراخوانی شیء Session در View در MVC را خواهیم آموخت. ', CAST(0x2C3A0B00 AS Date))
INSERT [dbo].[Articles] ([ArticleID], [Title], [Text], [Date]) VALUES (10, N'دریافت Connection String از فایل App.Config در #C و VB.NET', N'     در این مقاله بررسی خواهیم کرد که چگونه مقدار Connection String را در فایل App.Config در #C و VB.NET بخوانیم. ', CAST(0x6A3A0B00 AS Date))
SET IDENTITY_INSERT [dbo].[Articles] OFF

سپس یک پروژه با نام ArchiveArticles_MVC ایجاد میکنیم .

یک کنترلر با نام Home ایجاد میکنیم .

در پوشه model یک مدل Entity ایجاد میکنیم .

در کنترلر Home یک اکشن با نام Archive ایجاد میکنیم که خروجی یک PartialView برمیگرداند .

      public ActionResult Archive()
        {
            var archive = db.Articles.GroupBy(a => a.Date.Month).ToList();
            List<DateTime> list= archive.Select(ar => new DateTime(DateTime.Now.Year, int.Parse(ar.Key.ToString()), 01)).ToList();

            return PartialView(list);
        }

در کد بالا توسط GroupBy ماه ها را بدست آوردیم و یک لیست از نوع DateTime ایجاد کردیم و به View ارسال کردیم .

کد View :

@model IEnumerable<DateTime>
<div class="list-group">

@foreach (var item in Model)
{
    <a href="/Home/ShowArchive/@item.Month" class="list-group-item">@item.ToString("MMMM")</a>
}
</div>

جهت نمایش تاریخ به صورت شمسی یک کلاس با نام PersianCulture به پروژه اضافه کردیم

و کد زیر را به Global اضافه کردیم

       protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var persianCulture = new PersianCulture();
            Thread.CurrentThread.CurrentCulture = persianCulture;
            Thread.CurrentThread.CurrentUICulture = persianCulture;
        }

در ویو آرشیو بعد از کلیک روی هر ماه عدد ماه را به متد ShowArchive در کنترلر Home ارسال میکنیم

  public ActionResult ShowArchive(int id)
        {
            return View(db.Articles.Where(a => a.Date.Month == id).ToList());
        }

کد های ویو :

@model IEnumerable<ArchiveArticles_MVC.Models.Articles>

@{
    ViewBag.Title = "ShowArchive";
}

@foreach (var item in Model)
{
    <div class="thumbnail">
        <h2>@item.Title</h2>
        <blockquote>
            @item.Text
            <footer>@item.Date.ToString("dddd, dd MMMM yyyy")</footer>
        </blockquote>

    </div>
}

نمونه ضمیمه شده.

فایل های ضمیمه