آرشیو بندی مطالب در ASP.NET

در این مقاله میریم سراغ آموزش ساخت ارشیو در ASP.NET ، منظور از ارشیو لیستی از ماه ها را برای نمایش ارشیو شدن مطالب و لیستی از آن در یک صفحه ای جدا در اختیار کاربر قرار میدیم !

برای ساخت آرشیو ابتدا نیاز به تاریخ شمسی داریم خوب کلاس PersianCulture را به برنامه میدیم (در فایل ضمیمه شده ) و کد را زیر را در Global.asax قرار میدیم تا تاریخ ها را شمسی کنیم.

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


 

یک فرم ایجاد میکنیم برای نمایش لیست ارشیو کد زیر را در قسمت Aspx قرار بدید !

 <asp:LinqDataSource runat="server" ID="dsShowListUser" OnSelecting="dsShowListUser_OnSelecting"></asp:LinqDataSource>
        <asp:Button runat="server" ID="btnAddNews" Text="ثبت خبر" OnClick="btnAddNews_OnClick"/>
        <ul style="margin: 0 auto">


            <asp:Repeater runat="server" ID="rptShowArchive" DataSourceID="dsShowListUser">

                <ItemTemplate>
                    <li>
                        <a href=' <%#string.Format("/Articels/{0:MM}/{1:yyyy}",Eval("Date"),Eval("Date"))%>'>
                            <%#string.Format("{0:MMMM}",Eval("Date"))  %>
                        </a>
                    </li>
                    <br />
                </ItemTemplate>
            </asp:Repeater>
        </ul>

به کد زیر دقت کنید :


                        <a href=' <%#string.Format("/Articels/{0:MM}/{1:yyyy}",Eval("Date"),Eval("Date"))%>'>
                            <%#string.Format("{0:MMMM}",Eval("Date"))  %>
                      

و در قسمت CS فرمی که کد بالا را قرار دادید کد زیر را قرار بدید !

 protected void dsShowListUser_OnSelecting(object sender, LinqDataSourceSelectEventArgs e)
        {
            
            e.Result = (from u in db.Tbl_Archive select new
            {
                u.Date
            }).DistinctBy(u=>u.Date.Month).ToList();
            
        }

ما داریم تو پارامتر ارسال میکنیم به صورت Routing که باید ابتدا Routing را ساخته و در Global اجرا کنیم ! به فایل Global رفته و کد های زیر را قرار دهید.

private void RegisterRoutes(RouteCollection route)
        {
            route.MapPageRoute("ShowArticels", "Articels/{Mothe}/{Years}", "~/ShowArticels.aspx");

        }

و کد زیر را در قسمت Application_Start قرار بدید.

            RegisterRoutes(RouteTable.Routes);

 

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

در فرمی که برای نمایش ساختید در ASPX کد زیر را قرار بدید !

 <asp:LinqDataSource runat="server" ID="dsShowArticels" OnSelecting="dsShowArticels_OnSelecting"></asp:LinqDataSource>
        <ul>
            <asp:Repeater runat="server" ID="rptShowLustArticels" DataSourceID="dsShowArticels">

                <ItemTemplate>
                    <li>
                        <%#Eval("Title") %>
                    </li>
                </ItemTemplate>
            </asp:Repeater>
        </ul>

و در قسمت .CS زیر را قرار بدید !


  protected void dsShowArticels_OnSelecting(object sender, LinqDataSourceSelectEventArgs e)
        {

            PersianCalendar pc = new PersianCalendar();
            int mothe = Convert.ToInt32(Page.RouteData.Values["Mothe"].ToString());
            int years = Convert.ToInt32(Page.RouteData.Values["Years"].ToString());
            var resultdate=pc.ToDateTime(years,mothe, DateTime.Now.Day, 0, 0, 0, 0);
            e.Result=
                (from u in db.Tbl_Archive where u.Date.Month == resultdate.Month select new
                {
                    u.ArticelsID,
                    u.Title,
                }).ToList();
            
        }

به کد بالا دفت کنید ما دو پارامتر ارسال کردیم که توسط کد زیر آن را گرفته و در یک متغیر قرار دادیم !

            int mothe = Convert.ToInt32(Page.RouteData.Values["Mothe"].ToString());
            int years = Convert.ToInt32(Page.RouteData.Values["Years"].ToString());


خروجی که در این دو متغیر داریم شمسی است ولی اطلاعات ما به صورت میلادی در سیستم ثبت شده حال باید این متغیر ها را به میلادی تبدیل کنیم کد زیر این کارو برامون انجام میده.



            var resultdate=pc.ToDateTime(years,mothe, DateTime.Now.Day, 0, 0, 0, 0);

 

امید وارم استفاده کنید !

فایل دیتابیس و نمونه را براتون ضمیمه کردم !

 

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